Dmy*_*kyi 2 logging spring integration-testing kotlin spring-boot
我有一个混合了 Spring Boot、Jersey 和 Camel 应用程序的应用程序。它从一个 Spring Boot 应用程序开始。我正在编写集成测试,并且需要对日志进行断言?
例如,我需要断言 Camel 路由从源 A 读取消息。如何对日志进行可靠断言?是否有任何行业标准?
注意:我尝试找到任何解决方案,但目前,我既不明白如何解决它,也找不到现成的解决方案。
更新 1:我低估的细节,但它似乎很重要。我用Kotlin,不是Java。我尝试应用answer,但它不能一对一地转移到Kotlin.
更新 2:
这是从Java到的转换Kotlin。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())
}
Run Code Online (Sandbox Code Playgroud)
Kotlin:没有足够的信息来推断类型变量 A
不是错误,但我感觉它会在运行时失败:
私有 val 记录器:记录器 = LoggerFactory.getLogger(ROOT_LOGGER_NAME) 作为记录器
Spring Boot 带有适用于 JUnit 4 的OutputCapture规则和适用于 JUnit 5 的OutputCaptureExtension,允许您对发送到标准输出的文本进行断言。
public class MyTest {
     @Rule
     public OutputCaptureRule output = new OutputCaptureRule();
     @Test
     public void test() {
         // test code
         assertThat(output).contains("ok");
     }
 }
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           239 次  |  
        
|   最近记录:  |