我正在准备一个测试环境。为我的项目。
我有一堆maven项目,有些项目正在使用spring bean测试的常用配置( test-context.xml )。当我在每个项目的src\test\resources
中进行此配置时,所有测试都有效。当我想将该配置移动到一个单独的项目(项目测试)以消除每个项目中的重复时,我得到一个异常:
Caused by: java.io.FileNotFoundException: class path resource [test-context.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
... 39 more
src/main/resources
而不是src/test/resources
时,从另一个项目添加测试资源的方法是什么,以便从TestNG测试中看到它?
在这种情况下将其移至src/main/resources
最佳方式吗?
答案 0 :(得分:3)
您不能简单地依赖项目测试,并期望来自src/test/resources
的资源可以通过。您需要从project-tests
项目构建测试JAR。幸运的是,这很简单,并且在另一个SO线程Sharing Test code in Maven
基本思想是使用分类器生成project-tests
的测试jar文件,然后将其用作项目中的依赖项。这种方法是您尝试做的最佳实践。
答案 1 :(得分:1)
Ramsinb解决方案是正确的。但是,如果你只处理资源,更喜欢一个更好的设计组件,并共享一个zip。
<强>的pom.xml 强>
<groupId>com.mycompany</groupId>
<artifactId>cfg_dev</artifactId>
<version>1.1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>cfg-main-resources</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptors>
<descriptor>/src/main/assembly/resources.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
装配描述符 它将产生这个工件:cfg_dev-1.1.0-resources.zip 请注意
“分类器”是资源(如程序集名称)
资源 压缩 假 的src / main /资源
<强>的pom.xml 强>
请注意
依赖“分类器”是资源(如以前的程序集名称)
<!-- Unit test dependency -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>cfg_dev</artifactId>
<version>${project.version}</version>
<classifier>resources</classifier>
<type>zip</type>
<scope>test</scope>
</dependency>
...
SRC /测试/资源 真正 $ {} project.build.directory /测试资源 真正
<plugins>
<!-- Unzip shared resources -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-cfg-test-resources</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>generate-test-resources</phase>
<configuration>
<outputDirectory>${project.build.directory}/test-resources</outputDirectory>
<includeArtifacIds>cfg_dev</includeArtifacIds>
<includeGroupIds>${project.groupId}</includeGroupIds>
<excludeTransitive>true</excludeTransitive>
<excludeTypes>pom</excludeTypes>
<scope>test</scope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>