java - JUnit RunListener 在失败()时被删除

标签 java junit listener

我正在使用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/

相关文章:

Android - 检测 onTouchListener 时出现问题

java - 如何在独立的 Java 应用程序中有效地实现单例监听器?

java - 不幸的是 <app><package> 已在 android 模拟器中停止-错误,如何解决这个问题?

java.io.IOException : Server returned HTTP response code: 403 for URL

java - 在 Eclipse 中,如何将项目导出到 ZIP(包括引用的库)?

java - 维护 Junit 中测试的执行顺序

java - 如何通过 Eclipse Selection Service 处理来自不同提供商的选择,同时保持松散耦合?

java - 更改语言 三星 S8+

java - 为什么它总是给出相同的时间?

multithreading - 单元测试多线程应用程序