maven项目中测试资源的公共位置

时间:2012-09-26 10:25:56

标签: java spring maven testng

我正在准备一个测试环境。为我的项目。
我有一堆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
  • 我在测试项目中为项目测试添加了maven依赖
  • test-context.xml 未转到目标目录
  • 当我将资源放在src/main/resources而不是src/test/resources时,

从另一个项目添加测试资源的方法是什么,以便从TestNG测试中看到它? 在这种情况下将其移至src/main/resources最佳方式吗?

2 个答案:

答案 0 :(得分:3)

您不能简单地依赖项目测试,并期望来自src/test/resources的资源可以通过。您需要从project-tests项目构建测试JAR。幸运的是,这很简单,并且在另一个SO线程Sharing Test code in Maven

中得到了很好的解释

基本思想是使用分类器生成project-tests的测试jar文件,然后将其用作项目中的依赖项。这种方法是您尝试做的最佳实践。

答案 1 :(得分:1)

Ramsinb解决方案是正确的。但是,如果你只处理资源,更喜欢一个更好的设计组件,并共享一个zip。

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 请注意

  1. 这是一个zip存档
  2. “分类器”是资源(如程序集名称)

      资源        压缩      假               的src / main /资源               

  3. 主要项目:

    <强>的pom.xml

    请注意

    1. 这取决于zip存档
    2. 依赖“分类器”是资源(如以前的程序集名称)

      <!-- 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>