不属于classpath的dependecies的测试资源?
我有一个使用Maven设置的多模块Spring项目:
my-root (pom) - my-logic - my-webapp (depending on my-logic) - my-consoleapp (depending on my-logic)
我的Test类inheritance自AbstractTransactionalJUnit4SpringContextTests
并使用@ContextCofiguration
来设置ApplicationContext
。
例如Spring Controller的测试类:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext-logic-test.xml", "classpath:applicationContext-web-test.xml"}) public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired private ApplicationContext applicationContext; ... }
如您所见,每个模块都有一个配置XML。 我有单独的配置进行测试,驻留在每个模块的测试/资源中(另外还有后缀“-test”)。 如果我在Eclipse中运行JUnit测试,这一切都有效(类编译,运行和JUnit测试成功)。
现在我的问题: 使用Maven运行测试将无法正常工作! (例如在my-root
上使用“Run As”>“Maven install”(我使用m2eclipse))。 具体来说,它将抛出以下exception:
java.io.FileNotFoundException:类路径资源[applicationContext-logic-test.xml]无法打开,因为它不存在
似乎Maven没有将my-logic/src/test/resources
的文件添加到运行my-webapp
的unit testing时设置的类路径中。
我该如何解决这个问题?
似乎Maven没有将
my-logic/src/test/resources
的文件添加到运行my-webapp的unit testing时设置的类路径中。
不,事实上,它没有。 首先,Maven使用始终通过本地存储库解析的二进制依赖项。 其次,二进制依赖项不包括测试内容。
但你能做的是:
- 配置
my-logic
模块使用jar:test-jar
创建测试JAR - 配置
my-webapp
模块以依赖于此测试JAR(使用test
范围)。
对于#1,您必须在my-logic
的pom.xml中配置Maven Jar插件:
org.apache.maven.plugins maven-jar-plugin 2.2 test-jar
Maven将在package
期间创建一个包含target/test-classes
内容的JAR并安装/部署它。
对于#2,在my-webapp
的pom.xml中声明对测试JAR的依赖:
... com.myco.app foo 1.0-SNAPSHOT test-jar test ...
应该这样做。
这是设计的。 测试资源不会放入输出工件中,因此即使在unit testing类路径中也无法访问您所依赖的任何测试依赖项。
如果你想完成你想要做的事情,你应该创建一个项目,其中包含测试所需的资源,并使其成为my-logic和my-webapp的测试范围依赖项。