Я пытаюсь настроить проект с помощью Spring-Test, используя TestNg в Maven. Код такой:
@ContextConfiguration(locations={"test-context.xml"})
public class AppTest extends AbstractTestNGSpringContextTests {
@Test
public void testApp() {
assert true;
}
}
Test-context.xml просто определяет bean-компонент:
<bean id="app" class="org.sonatype.mavenbook.simple.App"/>
У меня возникла ошибка Failed to load ApplicationContext при запуске mvn test из командной строки, кажется, не удается найти файл test-context.xml; однако я могу заставить его правильно работать внутри Eclipse (с помощью плагина TestNg).
Итак, test-context.xml находится в src / test / resources /, как мне указать это в pom.xml, чтобы команда mvn test работала? Спасибо,
ОБНОВИТЬ:
Спасибо за ответ. Ошибка «Невозможно загрузить файл контекста» была вызвана тем, что я переместил файл в другое место, так как я думал, что проблема была в пути к классам. Теперь я обнаружил, что файл контекста загружен из вывода Maven, но тест не удался:
Running TestSuite
May 25, 2010 9:55:13 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [test-context.xml]
May 25, 2010 9:55:13 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.GenericApplicationContext@171bbc9: display name [org.springframework.context.support.GenericApplicationContext@171bbc9]; startup date [Tue May 25 09:55:13 PDT 2010]; root of context hierarchy
May 25, 2010 9:55:13 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.GenericApplicationContext@171bbc9]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1df8b99
May 25, 2010 9:55:13 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1df8b99: defining beans [app,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor]; root of factory hierarchy
Tests run: 3, Failures: 2, Errors: 0, Skipped: 1, Time elapsed: 0.63 sec <<< FAILURE!
Results :
Failed tests:
springTestContextBeforeTestMethod(org.sonatype.mavenbook.simple.AppTest)
springTestContextAfterTestMethod(org.sonatype.mavenbook.simple.AppTest)
Tests run: 3, Failures: 2, Errors: 0, Skipped: 1
Если я использую Spring-test версии 3.0.2.RELEASE, ошибка становится:
org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance() is depending on nonexistent method null
Вот структура проекта:
simple
|-- pom.xml
`-- src
|-- main
| `-- java
`-- test
|-- java
`-- resources
|-- test-context.xml
`-- testng.xml
testng.xml:
<suite name="Suite" parallel="false">
<test name="Test">
<classes>
<class name="org.sonatype.mavenbook.simple.AppTest"/>
</classes>
</test>
</suite>
test-context.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
default-lazy-init="true">
<bean id="app" class="org.sonatype.mavenbook.simple.App"/>
</beans>
В pom.xml я добавляю артефакты testng, spring и spring-test, а также плагин:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.1</version>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5.6</version>
<scope>test</scope>
</dependency>
<build>
<finalName>simple</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
Basically, I replaced 'A Simple Maven Project' Junit with TestNg, hope it works.
ОБНОВИТЬ:
Я думаю, что у меня проблема (до сих пор не знаю почему) - всякий раз, когда я расширяю AbstractTestNGSpringContextTests или AbstractTransactionalTestNGSpringContextTests, тест завершается с ошибкой:
Failed tests:
springTestContextBeforeTestMethod(org.sonatype.mavenbook.simple.AppTest)
springTestContextAfterTestMethod(org.sonatype.mavenbook.simple.AppTest)
Итак, в конце концов ошибка исчезла, когда я переопределил два метода. Я не думаю, что это правильный путь, не нашел много информации в документации по весеннему тесту. Если вы знакомы с фреймворком Spring Test, пожалуйста, пролейте немного света на это.