我的问题:有没有办法强制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
三个测试失败的文件。这种情况的后果之一是我的 Hudson 构建将向我显示以下信息:
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?)指示测试类的名称。
谢谢。
我每个测试类都有一个文件,所以我花了一点时间来弄清楚这一点:您正在使用测试套件。
使用测试套件时,所有测试结果最终都位于具有套件名称的单个文件中。
没有更改此行为的选项。尝试提交功能请求。