我使用Maven保命插件來執行我的應用程序的JUnit測試。停止試驗後執行Maven的第一個錯誤/失敗神火
我想停下來第一次失敗或錯誤後執行。在我的情況下,這些是集成測試,可以修改應用程序狀態,所以我需要知道發生故障後的確切系統狀態(我們遇到了一個奇怪的問題,即如果執行隔離,測試通過,但如果執行整個套件)。
可能嗎?我在插件文檔here中找不到選項。
我使用Maven保命插件來執行我的應用程序的JUnit測試。停止試驗後執行Maven的第一個錯誤/失敗神火
我想停下來第一次失敗或錯誤後執行。在我的情況下,這些是集成測試,可以修改應用程序狀態,所以我需要知道發生故障後的確切系統狀態(我們遇到了一個奇怪的問題,即如果執行隔離,測試通過,但如果執行整個套件)。
可能嗎?我在插件文檔here中找不到選項。
其實,事實證明,這是不可能的Maven的萬無一失,插件做。
我找到了答案here。
我實際上最終使用@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的萬無一失這樣的:
<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插件。
此外,如果你有集成測試失敗,這通常是在一個CI環境中進行。之後,您可以通過
mvn -Dit.test=NameOfTheFailedIntegrationTest verify
單獨運行發生故障的集成測試。
實際上它是一個maven-surefire-plugin issure,因爲maven failafe不會執行測試,它只是驗證結果。另外它不關心只執行失敗的測試,因爲測試通過執行時被隔離(見我的回答和更新) – 2013-04-05 17:48:37