如何使用 junit 断言 org.slf4j.Logger 语句?

发布于 2025-01-13 00:43:53 字数 536 浏览 0 评论 0原文

如何在 spring-boot-test 中使用 junit 验证来自 org.slf4j.Logger 的日志语句?

@Service
public class MyService {
    private final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(this.getClass());
    
    public void run() {
        LOGGER.info("running");
    }
}

@SpringBootTest
public class MyTest {
    @Autowired
    private MyService service;

    @Test
    public void test() {
        service.run();
        
        //TODO how to validate log statement?
    }
}

How can I validate log statements from a org.slf4j.Logger with junit in a spring-boot-test?

@Service
public class MyService {
    private final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(this.getClass());
    
    public void run() {
        LOGGER.info("running");
    }
}

@SpringBootTest
public class MyTest {
    @Autowired
    private MyService service;

    @Test
    public void test() {
        service.run();
        
        //TODO how to validate log statement?
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

渡你暖光 2025-01-20 00:43:53

我找到了 Springs @ExtendWith(OutputCaptureExtension.class) 的解决方案:

@SpringBootTest
@TestPropertySource(properties = "logging.level.root=INFO")
public class LogServiceTest {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    @ExtendWith(OutputCaptureExtension.class)
    public void testLogging(CapturedOutput capture) {
        logger.info("junit"); //can be replaced with any service call that logs
        assertThat(capture.getOut()).contains("junit");
    }
}

它需要 log4j 配置上的 follow="true" 选项:

I found a solution with Springs @ExtendWith(OutputCaptureExtension.class):

@SpringBootTest
@TestPropertySource(properties = "logging.level.root=INFO")
public class LogServiceTest {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    @ExtendWith(OutputCaptureExtension.class)
    public void testLogging(CapturedOutput capture) {
        logger.info("junit"); //can be replaced with any service call that logs
        assertThat(capture.getOut()).contains("junit");
    }
}

It requires the follow="true" option on your log4j config:

<Console name="CONSOLE" target="SYSTEM_OUT" follow="true">

回眸一遍 2025-01-20 00:43:53

如果底层 SLF4J 是 Log4j 2.x,正如您的标签可能暗示的那样,您可以使用 ListAppender,其中包含在 log4j-coretest-jar 中。

If the underlying SLF4J is Log4j 2.x, as your tags might implicate, you can use a ListAppender, which is contained in the log4j-core's test-jar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文