2

私はMavenを初めて使用し、これに頭を巻くのに少し問題があります。

プロジェクトとしてバンドルされた統合テストがたくさんあります。これらのテストを他のプロジェクトに自由に適用できるようにしたいと思います。

統合テストプロジェクトコードをPOMを使用して別のプロジェクトに取り込み、統合テストフェーズで実行するにはどうすればよいですか?

それを依存関係として取り入れ、統合テストプロジェクトのPOMがフェーズ統合テストを指定している場合。元のプロジェクトのビルドサイクルは、統合テストに到達するまで続き、その後、依存関係プロジェクトがそのフェーズで引き継ぎますか?

申し訳ありませんが、ここで死んだ馬を倒しているような気がします。あなたの回答は、私に何が起こっているのか、そして私が何をする必要があるのか​​を理解させるのに非常に役立ちました。私の質問は、私のテストコードがコンパイルされ、何らかの理由でテストを実行または検出しないスコープとしてtestを使用して依存関係として追加されたとしてもです。テストの名前はappTestで、JUnit 4.xタグが付いていますが、なぜ機能しないのかわかりません。

4

2 に答える 2

2

maven-jar-plugin を構成し、 mvn installを実行している分離アーティファクトでテストを公開できます。

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <executions>
  <execution>
   <goals>
    <goal>test-jar</goal>
   </goals>
  </execution>
 </executions>
</plugin>

その後、テストを実行する他のプロジェクトから依存関係をインポートします。

<dependency>
 <groupId>project.with.tests.groupid</groupId>
 <artifactId>projectwithtestsartifatid</artifactId>
 <version>1.0</version>
 <type>test-jar</type>
 <scope>test</scope>
</dependency>

とにかく、surefire または failsafe プラグインは、クラスパスからの jar ではなく、 target/test-classesフォルダー内のテストのみを検索します。それに関する未解決の問題が確実にあり、修正されたバージョンが割り当てられていません(少なくとも現時点では)。

回避策は、依存関係プラグインを使用してtarget/test-classes のテスト クラスをアンパックすることですが、これによりリリースが汚染される可能性があります。

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>resource-dependencies</id>
   <phase>process-test-classes</phase>
   <goals>
    <goal>unpack-dependencies</goal>
   </goals>
   <configuration>
    <includeTypes>test-jar</includeTypes>
    <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
   </configuration>
  </execution>
 </executions>
</plugin>
于 2012-10-24T13:39:40.127 に答える
1

最良のオプションは、統合テストのコードを別のモジュールに抽出することです。次に、mvn install別のプロジェクトをビルドするときに表示されるようにバイナリをローカル リポジトリに公開するために実行するmvn compile必要があります。または、これらのテストがマルチモジュール プロジェクトで使用される場合にのみ必要になります。モジュールのバージョンは親モジュールと同じです。別のプロジェクトまたはモジュールで使用するには、junit ライブラリのようなテスト スコープを持つ依存関係セクションで宣言する必要があります。

上記のオプションが適切でない場合は、テスト分類子 (ファイル名サフィックス) を使用して添付の jar を準備してみてください。

<build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>test-jar</id>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>com/thenewmotion/test/**/*.*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

テスト スコープに加えて使用するには、test-jar タイプまたはテスト分類子を追加する必要があります。

<dependency>
    <groupId>com.thenewmotion</groupId>
    <artifactId>msp-solveconnector</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>
于 2012-08-01T19:16:20.583 に答える