アプリケーションのjunitテストを実行するためにmaven Surefireプラグインを使用しています。
最初の失敗またはエラーの後に実行を停止したい。私の場合、これらはアプリケーションの状態を変更する統合テストであるため、失敗後の正確なシステム状態を知る必要があります (テストを単独で実行すると合格するが、スイート全体で実行すると合格しないという奇妙な問題が発生しています) )。
出来ますか?ここのプラグイン ドキュメントでオプションが見つかりませんでした。
アプリケーションのjunitテストを実行するためにmaven Surefireプラグインを使用しています。
最初の失敗またはエラーの後に実行を停止したい。私の場合、これらはアプリケーションの状態を変更する統合テストであるため、失敗後の正確なシステム状態を知る必要があります (テストを単独で実行すると合格するが、スイート全体で実行すると合格しないという奇妙な問題が発生しています) )。
出来ますか?ここのプラグイン ドキュメントでオプションが見つかりませんでした。
実際、これは maven-surefire-plugin ではできないことがわかりました。
ここで答えを見つけました。
私は実際に@mhallerによって提案されたソリューションを使用することになります
そこで、次のような junit リスナーを実装しました。
package br.com.xpto;
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import br.com.caelum.brutal.integration.scene.AcceptanceTestBase;
public class FailFastListener extends RunListener {
public void testFailure(Failure failure) throws Exception {
System.err.println("FAILURE: " + failure);
AcceptanceTestBase.close();
System.exit(-1);
}
@Override
public void testFinished(Description description) throws Exception {
AcceptanceTestBase.close();
System.exit(-1);
}
}
そして、次のように maven-surefire を構成します。
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>surefire-integration</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/scene/**/*Test.java</include>
</includes>
<forkMode>once</forkMode>
<properties>
<property>
<name>listener</name>
<value>br.com.caelum.brutal.integration.util.FailFastListener</value>
</property>
</properties>
</configuration>
</execution>
</executions>
<configuration>
<excludes>
<exclude>**/*</exclude>
</excludes>
</configuration>
</plugin>
まず統合テストでは、maven-surefire-plugin ではなく、maven-failsafe- pluginを使用する必要があります。
さらに、通常 CI 環境で行われる統合テストが失敗した場合。その後、失敗した統合テストを次の方法で実行できます
mvn -Dit.test=NameOfTheFailedIntegrationTest verify
別々に。