Mavenの統合テストフェーズのライフサイクルに対して定義された何百ものテストがあり、完了するまでに長い時間がかかります。
私がやりたいことは、integration-test
。私がやってみました:
mvn -Dtest=<my-test> integration-test
しかし、それは機能しません。 -Dtest
は、統合テストフェーズではなく、単体テスト目標のテストのみを実行します。 -Dintegration-test=<my-test>
代わりに、それは無視されました。
それを行う方法はありますか?
私の設定は:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/api/**</include>
</includes>
.....
Maven failsafe plugin を使用している場合は、it.test
プロパティを完全修飾テストクラス名に設定することで、単一の統合テストを実行できます。
mvn -Dit.test=your.TestCase verify
詳細はフェイルセーフプラグインのドキュメント を参照してください。
Failsafeのドキュメント では、次のようにテストを指定する必要があります。
mvn -Dit.test=BrokenIT verify
ただし、-Dit.testは動作しないようです。むしろ、Surefireテストの指定に使用したのと同じパラメーターが、Failsafeでも機能するようです。例えば:
mvn -Dtest=WorksIT verify
ドキュメントを修正するために バグ (EDIT:を提出しましたが、これは2.12で「再現できません」として閉じられました)。
-DfailIfNoTests=false
を追加するだけで、testNGで機能します。このようなもの:
mvn integration-test -Dtest=aITest -DfailIfNoTests=false
私はこれに苦労し、統合テストを1つだけ実行したいときに使用する追加のプロファイルを作成しました。私はここで正しい部分だけをうまく抽出できたことを願っています:
<profile>
<id>integrationTestSingle</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>surefire-it</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/integration/**/${test}.Java</include>
</includes>
<skipTests>false</skipTests>
</configuration>
</execution>
</executions>
<configuration>
<argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skipTests>true</skipTests>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
今、私は、integrationTestSingleプロファイルと-DfailIfNoTests=false -Dtest=NameOfTest
を使用してmavenを呼び出します。これは、通常の「テスト」フェーズ中に通常のテストを実行せず、統合中にNameOfTest
テストのみを実行します-テスト段階。
JUnitについてはわかりませんが、TestNGの場合、1つのテストのみを含むスイートXMLファイルを定義し、POMでそれを実行するようにsurefireプラグインを構成するという戦略になります。 POMでは、次のようになります(免責事項、これはテストされていません)。
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<phase>integration-test</phase>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>single-test.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
スイートファイルを設定するには、 http://testng.org/doc/documentation-main.html を参照してください。
自分でこれに遭遇しました。このようなものは私にとってうまくいきました:
mvn -Pintegration-test -Dtest=<my-test>
コツは、-Dtest部分の前にtest-groupが記述されていることを確認することでした。