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

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

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

class LoggerExtension : BeforeEachCallback, AfterEachCallback {
    private val listAppender: ListAppender<ILoggingEvent> = ListAppender<ILoggingEvent>()
    private val logger: Logger = LoggerFactory.getLogger(ROOT_LOGGER_NAME) as Logger

    override fun afterEach(extensionContext: ExtensionContext) {
        listAppender.stop()
        listAppender.list.clear()
        logger.detachAppender(listAppender)
    }

    override fun beforeEach(extensionContext: ExtensionContext) {
        logger.addAppender(listAppender)
        listAppender.start()
    }

    val messages: List<String>
        get() = listAppender.list.stream().map { e -> e.getMessage() }.collect(Collectors.toList())
    val formattedMessages: List<String>
        get() = listAppender.list.stream().map { e -> e.getFormattedMessage() }.collect(Collectors.toList())
}

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

2g32fytz

2g32fytz1#

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

public class MyTest {

     @Rule
     public OutputCaptureRule output = new OutputCaptureRule();

     @Test
     public void test() {
         // test code
         assertThat(output).contains("ok");
     }

 }

相关问题