如何在 Mule 4 EE 中测试应用程序记录的消息
How to test messages logged by the app in Mule 4 EE
对于 Mule 4 EE 应用程序,我正在使用 JUnit4 和 Rest Assured 编写集成测试。在测试中,我试图验证应用程序是否记录了某些消息。我该怎么做?
我写了一个客户附加程序并将其附加到根记录器,但它没有收到任何消息。 更新 - 这不起作用,因为 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 实现它。
对于 Mule 4 EE 应用程序,我正在使用 JUnit4 和 Rest Assured 编写集成测试。在测试中,我试图验证应用程序是否记录了某些消息。我该怎么做?
我写了一个客户附加程序并将其附加到根记录器,但它没有收到任何消息。 更新 - 这不起作用,因为 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 实现它。