失败时删除JUnit RunListener()

我使用RunListener让它们在写入System.out时失败,但是当我失败()一个unit testing时,删除了监听器。 有没有办法让测试失败而不删除监听器?

为了澄清一个代码示例

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非常容易,只需添加即可

    listener OutputListener   

到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"); } }