Java:在 JUnit assert* 中使用记录器

标签 java logging junit assert

我想在 JUnit 中做类似下面的事情:

assertTrue(logger.error("the condition is not true"), <a boolean condition>);

所以错误消息被记录器记录下来,记录器可以是例如commons 或 log4j。

但是 Junit 断言不采用记录器参数,那么有什么方法可以实现这一点,还是我需要 try catch 断言并将错误消息记录在 catch block 中?

最佳答案

您可以使用 JUnit TestRule TestWatcher . TestRule 在测试方法之前和之后执行代码(类似于 @Before@After),但您可以访问更多信息,并且更重要的是,测试的结果。 TestWatcher定义了诸如 succeeded()failed()starting()finished() 等方法,您可以实现以获得事件通知。

以下示例简单地打印出失败的测试和失败的断言。

public class TestWatcherTest {
  @Rule
  public TestWatcher testWatcher = new TestWatcher() {
    protected void failed(Throwable e, Description description) {
      System.out.println("" + description.getDisplayName() + " failed " + e.getMessage());
      super.failed(e, description);
    }

  };

  @Test
  public void test1() {
    Assert.assertEquals("hello world", 3, 4);
  }
}

您显然可以做您喜欢的事而不是 System.out.println()。这产生作为输出:

test1(uk.co.farwell.junit.TestWatcherTest) failed hello world expected:<3> but was:<4>

请注意,失败的断言是一个异常,因此您可以访问堆栈跟踪等。

关于Java:在 JUnit assert* 中使用记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734456/

相关文章:

java - 萨克斯字符将元素分开

java - 使用 Spring 进行 self 注入(inject)

python logging.basicConfig 不会覆盖现有的日志文件

batch-file - 批处理模式和日志文件上的Stata

java - 在 junit 测试用例中的测试方法之间传递信息

java - 使用 Mockito 或 jUnit 验证方法内的调用

java - 如何在不将方法设为静态的情况下使用@Enclosed

java - Struts2教程不起作用

java - 发送文件时保持套接字处于 Activity 状态

angular - 将Winston记录器与Electronic + Angular 2一起使用