我正在使用RunListener让测试在写入 System.out 时失败,但是当我失败()单元测试时,监听器将被删除。有没有办法让测试失败而不删除监听器?
为了澄清代码示例
public class OutputListenerTest {
@Test
public void testPrintIsDicovered() {
JUnitCore runner = new JUnitCore();
// the OutputListener calls fail() when something was written
runner.addListener(new OutputListener());
Result result = runner.run(TestWithOutput.class);
}
public static class TestWithOutput {
@Test
public void testOutput1() {
System.out.println("foo");
}
@Test
public void testOutput2() {
System.out.println("bar");
}
}
}
我期望的是:2 次测试失败
什么是:第一个测试失败,监听器被删除。
根据要求,这里是 OutputListener 代码 http://paste.robbi5.com/4916ca5b 可以不贴在这里吗,太长了,无助于解决问题?
更多背景信息
我选择了 RunListener,因为它在 Maven 中工作非常简单,只需添加
<properties>
<property>
<name>listener</name>
<value>OutputListener</value>
</property>
</properties>
到 maven-surefire-plugin 和 mvn test
显示哪些测试以某种方式使用 System.out。
最佳答案
添加一个Runner来添加监听器。
public class AddListenerRunner extends BlockJUnit4ClassRunner {
public AddListenerRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override public void run(RunNotifier notifier){
notifier.addListener(new OutputListener());
super.run(notifier);
}
}
然后您可以在测试中使用它,如下所示。
@RunWith(AddListenerRunner.class)
public class OutputListenerTest {
@Test
public void testOutput1() {
System.out.println("foo");
}
@Test
public void testOutput2() {
System.out.println("bar");
}
}
关于java - JUnit RunListener 在失败()时被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207996/