2011-05-17 38 views
5

我的問題:是否有辦法強制Maven Surefire(或JUnit?)在從測試套件中執行該類時指示失敗測試類的名稱?有沒有辦法強制Maven Surefire或JUnit在從測試套件執行時指出失敗測試類的名稱?

現在,的故事。

想象一下,您有一個啓動兩個JUnit測試的JUnit測試套件。測試類的

例子:

public class TestOne { 

    @Test 
    public void foo() { 
     assertTrue(false); 
    } 

    @Test 
    public void bar() { 
     assertTrue(false); 
    } 

} 

@UnitTest 
public class TestTwo { 

    @Test 
    public void foo() { 
     assertFalse(true); 
    } 

} 

和測試套件:

@RunWith(Suite.class) 
@SuiteClasses(value = { TestOne.class, TestTwo.class }) 
public class MySuite { 

} 

現在,如果我運行測試套件(mvn test -Dtest=MySuite),我有以下錯誤:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running caf.opm.preclosing.junit.MySuite 
Tests run: 3, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec <<< FAILURE! 

Results : 

Failed tests: 
    foo(my.project.junit.TestOne) 
    bar(my.project.junit.TestOne) 
    foo(my.project.junit.TestTwo) 

Tests run: 3, Failures: 3, Errors: 0, Skipped: 0 

因此,讀取這些行,我可以很容易地發現哪些類和測試失敗。

但是,在target/surefire-reports/目錄中,我只有一個文件,MySuite.txt三個測試失敗。 一個這樣的情況的後果是,我的哈德森構建會告訴我的以下信息:

All Failed Tests 
Test Name  Duration Age 
>>> my.project.junit.MySuite.foo 0.0 1 
>>> my.project.junit.MySuite.bar 0.0 1 
>>> my.project.junit.MySuite.foo 0.0 1 

正如你所看到的,它變得更難識別失敗的測試,例如,爲TestOne.foo()TestTwo.foo()失敗,我在JUnit報告中看到兩個MySuite.foo錯誤。 當然,我可以通過閱讀失敗測試的日誌來檢索測試類的名稱,但它不是一個真正的解決方案...

所以我的問題是知道我是否可以強制Surefire(或JUnit?)以指示測試類的名稱。

謝謝。

+0

您是否需要使用自定義'TestSuite' - 您可以讓Hudson/Maven簡單地執行所有*測試嗎?測試階段的默認行爲將執行所有測試,並按照您的預期報告它們。 – 2011-05-17 16:11:12

+0

您使用的是哪個版本的surefire插件?根據我的經驗,在surefire-reports文件夾中應該有補充文件... – khmarbaise 2011-05-17 16:39:00

+0

爲什麼使用套件?爲什麼不讓surefire做這項工作... – khmarbaise 2011-05-17 16:39:29

回答

0

我爲每個測試類獲得一個文件,所以花了我一點時間來弄清楚這一點:您正在使用測試套件。

當使用測試套件時,所有的測試結果都會以套件名稱結尾在單個文件中。

沒有改變此行爲的選項。嘗試file a feature request

相關問題