Spring Boot JUnit 无法重置测试类之间的日志记录上下文

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

在我的 Spring Boot 项目中,我有一些测试类,我使用 ListAppender 检查日志消息,并且它们运行良好。这些就像:

@ExtendWith(MockitoExtension.class)
class MyServiceTest {
    ...
}

当我尝试检查 Level.TRACE 消息时,出现了问题。 我们使用 logback,并且它在主应用程序中仅配置为 DEBUG 级别,因此我将 logback-test.xml 添加到我的测试上下文中,以将日志记录级别设置为 TRACE。 当我单独运行我的测试类时,一切都很好,并且我收到了很好的日志消息,例如

21:31:18.332 [main] TRACE a.b.c.MyService - Processing Started: File ...

我还有在 Spring Boot 上下文下运行的测试,例如

@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisServiceTest {
    ...
}

这种类型的测试会导致 logback 使用主日志记录配置,并且我得到如下日志输出

{"timestamp":"2024-07-26T08:32:56.172-07:00","logger":"a.b.c.RedisService","level":"INFO","thread":"[main]","message":"Caching file size in redis with hashKey: ..."}

当我运行整个测试套件时,它就会崩溃。 当我的 SpringBootTest 在普通 Mockito 测试之前运行时,记录器会卡在非测试日志配置中,并且我的 TRACE 消息不会被记录,因此我的测试失败。 我尝试在 SpringBootTest 类上使用 @DirtiesContext 注释,但这并不能解决问题。 如果我删除 SpringBootTest 类,测试套件运行正常。 如何重置我的日志记录上下文?

其他配置信息:

  • Spring Boot 2.3.12
  • JUnit 5.6.3
  • 登录1.2.3
spring-boot spring-boot-test
1个回答
0
投票

好吧,我找到了我的问题。 我永远不应该将 logback-test.xml 添加到测试资源中。 我删除了该文件并通过添加修改了主 logback 配置文件

<springProfile name="test">
    <logger name="com.mycompany.myproject" level="trace"/>
</springProfile>

一切都很好。

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