2

我正在准备一个测试环境。对于我的项目。
我有一堆 Maven 项目,其中一些项目使用通用配置进行 Spring bean 测试(test-context.xml)。src\test\resources当我在每个项目中都有此配置时,所有测试都有效。当我想将该配置移动到单独的项目(project-test)以消除每个项目中的重复项时,我得到一个异常:

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最佳方式吗?

4

2 回答 2

3

您不能简单地依赖项目测试并期望资源src/test/resources通过。您将需要从您的project-tests项目中构建一个测试 JAR。幸运的是,这很简单,并且在另一个 SO 线程Maven 中的共享测试代码中得到了很好的解释

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

于 2012-09-26T10:31:04.910 回答
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 请注意

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

    资源 zip false src/main/resources

主要项目:

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/test/resources true ${project.build.directory}/test-resources true

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

于 2012-09-26T11:53:09.177 回答