2013-04-05 61 views
4

我使用Maven保命插件來執行我的應用程序的JUnit測試。停止試驗後執行Maven的第一個錯誤/失敗神火

我想停下來第一次失敗或錯誤後執行。在我的情況下,這些是集成測試,可以修改應用程序狀態,所以我需要知道發生故障後的確切系統狀態(我們遇到了一個奇怪的問題,即如果執行隔離,測試通過,但如果執行整個套件)。

可能嗎?我在插件文檔here中找不到選項。

回答

6

其實,事實證明,這是不可能的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> 
1

首先進行集成測試,您應該使用maven-failsafe-plugin而不是 maven-surefire插件。

此外,如果你有集成測試失敗,這通常是在一個CI環境中進行。之後,您可以通過

mvn -Dit.test=NameOfTheFailedIntegrationTest verify 

單獨運行發生故障的集成測試。

+1

實際上它是一個maven-surefire-plugin issure,因爲maven failafe不會執行測試,它只是驗證結果。另外它不關心只執行失敗的測試,因爲測試通過執行時被隔離(見我的回答和更新) – 2013-04-05 17:48:37

相關問題