2

テスト環境を準備しています。私のプロジェクトのために。
私はたくさんのMavenプロジェクトを持っており、いくつかのプロジェクトはSpring Beansテスト(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

単純に project-tests に依存していて、リソースがsrc/test/resources提供されることを期待することはできません。プロジェクトからテスト JAR をビルドする必要がありますproject-tests。幸いなことに、これは非常に単純であり、別の 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 に答える