我的問題:是否有辦法強制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?)以指示測試類的名稱。
謝謝。
您是否需要使用自定義'TestSuite' - 您可以讓Hudson/Maven簡單地執行所有*測試嗎?測試階段的默認行爲將執行所有測試,並按照您的預期報告它們。 – 2011-05-17 16:11:12
您使用的是哪個版本的surefire插件?根據我的經驗,在surefire-reports文件夾中應該有補充文件... – khmarbaise 2011-05-17 16:39:00
爲什麼使用套件?爲什麼不讓surefire做這項工作... – khmarbaise 2011-05-17 16:39:29