我有一个混合了Spring Boot,Jersey和Camel应用程序的应用程序。它作为Spring Boot应用程序启动。我正在编写集成测试,我需要在日志中声明内容吗?
例如,我需要断言骆驼路由从源A读取了一条消息。如何在日志中做出可靠的断言?是否有任何行业标准?
注意:我尝试找到任何解决方案,但此刻,我既不知道如何解决它,也无法找到现成的解决方案。
更新1:我低估了细节,但这似乎很重要。我用Kotlin
,不是Java
。我尝试应用答案,但并非一对一可以转移到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())
}
Kotlin:没有足够的信息来推断类型变量A
这不是错误,但是我有一种感觉,它将在运行时失败:
私有val记录器:Logger = LoggerFactory.getLogger(ROOT_LOGGER_NAME)作为Logger
春天开机自带OutputCapture规则的JUnit 4和OutputCaptureExtension选择JUnit 5,可以让你在断言发送到标准输出的文本。
public class MyTest {
@Rule
public OutputCaptureRule output = new OutputCaptureRule();
@Test
public void test() {
// test code
assertThat(output).contains("ok");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句