如何在Mule 4 EE中测试应用所记录的消息。

问题描述 投票:0回答:1

对于一个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 integration-testing junit4 log4j2 mulesoft
1个回答
0
投票

我不认为这是一个好的测试设计。日志记录不是为了单元测试检查。这个测试会很容易被破解。另外从技术上来说,你提到的Mule 4中的实现并不容易,也不可能用这种方式来捕获。再加上目前Mule 4只支持MUnit,不支持JUnit。

我建议退一步想一想,你的测试真正应该验证的是什么,是缓存而不是日志。如果可能的话,尽量用MUnit来实现。

© www.soinside.com 2019 - 2024. All rights reserved.