我正在使用 maven surefire 插件来执行我的应用程序的 junit 测试。
我想在第一次失败或错误后停止执行。在我的情况下,这些是修改应用程序状态的集成测试,所以我需要知道失败后的确切系统状态(我们有一个奇怪的问题,如果单独执行测试通过,但如果与整个套件一起执行则不会)。
是否可以?我在这里的插件文档中找不到选项。
我正在使用 maven surefire 插件来执行我的应用程序的 junit 测试。
我想在第一次失败或错误后停止执行。在我的情况下,这些是修改应用程序状态的集成测试,所以我需要知道失败后的确切系统状态(我们有一个奇怪的问题,如果单独执行测试通过,但如果与整个套件一起执行则不会)。
是否可以?我在这里的插件文档中找不到选项。
实际上,事实证明这与 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-failsafe-plugin而不是maven-surefire-plugin。
此外,如果您有失败的集成测试,这通常是在 CI 环境中完成的。之后,您可以通过以下方式运行失败的集成测试
mvn -Dit.test=NameOfTheFailedIntegrationTest verify
分别地。