对于一个Mule 4 EE应用程序,我正在使用JUnit4和Rest Assured编写集成测试。在一个测试中,我试图验证某些消息是否被应用程序记录。我怎样才能做到这一点?
我写了一个customer appender并将其连接到根日志器,但它没有收到任何消息。更新 - 这是不工作的,因为Mule运行时是在一个单独的进程中运行的,而测试不能进入运行时的记录器。
static class TestAppender extends AppenderSkeleton {
public List<org.apache.log4j.spi.LoggingEvent> events =
new ArrayList<org.apache.log4j.spi.LoggingEvent>();
public void close() {}
public void clearLog() {
events.clear();
}
public boolean requiresLayout() {
return false;
}
@Override
protected void append(LoggingEvent event) {
events.add(event);
}
}
而测试
// is not working
@Test
public void test_log_msg() throws Exception {
TestAppender testAppender = new TestAppender();
Logger.getRootLogger().addAppender(testAppender);
// perform some action that causes logging
assertEquals(testAppender.events.size(), 1);
}
任何帮助都将是非常感激的。
具体来说,我正在尝试验证缓存对我的API是否有效。我打算通过验证缓存发生时我在应用程序中记录的消息来实现。如果有更优雅的方法来做,请告诉我。
我不认为这是一个好的测试设计。日志记录不是为了单元测试检查。这个测试会很容易被破解。另外从技术上来说,你提到的Mule 4中的实现并不容易,也不可能用这种方式来捕获。再加上目前Mule 4只支持MUnit,不支持JUnit。
我建议退一步想一想,你的测试真正应该验证的是什么,是缓存而不是日志。如果可能的话,尽量用MUnit来实现。