如何测试spring启动应用程序的日志?

r7knjye2  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(501)

我有一个混合了spring-boot、jersey和camel应用程序的应用程序。它从一个spring启动应用程序开始。我正在编写集成测试,需要在日志上进行Assert?
例如,我需要Assertcamel路由从源a读取消息。如何对日志进行可靠Assert?有什么行业标准吗?
注:我试着找到任何解决办法,但目前,我既不知道如何解决,也不能找到现成的解决办法。
更新1:我低估的细节,但似乎很重要。我用 Kotlin ,不是 Java . 我试着用这个答案,但不是一对一的 Kotlin .
更新2:
这是从 JavaKotlin . ListAppender 没有足够的信息来解析中的类型 Kotlin .

  1. class LoggerExtension : BeforeEachCallback, AfterEachCallback {
  2. private val listAppender: ListAppender<ILoggingEvent> = ListAppender<ILoggingEvent>()
  3. private val logger: Logger = LoggerFactory.getLogger(ROOT_LOGGER_NAME) as Logger
  4. override fun afterEach(extensionContext: ExtensionContext) {
  5. listAppender.stop()
  6. listAppender.list.clear()
  7. logger.detachAppender(listAppender)
  8. }
  9. override fun beforeEach(extensionContext: ExtensionContext) {
  10. logger.addAppender(listAppender)
  11. listAppender.start()
  12. }
  13. val messages: List<String>
  14. get() = listAppender.list.stream().map { e -> e.getMessage() }.collect(Collectors.toList())
  15. val formattedMessages: List<String>
  16. get() = listAppender.list.stream().map { e -> e.getFormattedMessage() }.collect(Collectors.toList())
  17. }

kotlin:没有足够的信息来推断类型变量a
不是一个错误,但我感觉它在运行时会失败:
private val logger:logger=loggerfactory.getlogger(root\u logger\u name)作为logger

2g32fytz

2g32fytz1#

SpringBoot附带了用于JUnit4的outputcapture规则和用于JUnit5的outputcaptureextension,允许您对发送到标准输出的文本进行Assert。

  1. public class MyTest {
  2. @Rule
  3. public OutputCaptureRule output = new OutputCaptureRule();
  4. @Test
  5. public void test() {
  6. // test code
  7. assertThat(output).contains("ok");
  8. }
  9. }

相关问题