当前位置: 首页 > 知识库问答 >
问题:

Junit测试日志语句

谭奕
2023-03-14
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Foo {
    private final Logger log = LoggerFactory.getLogger(Foo.class);

    public String something() {
        log.info("doing foo test");
        return "test";
    }
}
public class FooTest {
    private Foo foo;

    @Before
    public void setUp() throws Exception {
        foo = new Foo();
    }

    @Test
    public void testSomething() {
        String result = foo.something();
        assertEquals(result,"test");
    }
}
public class FooTest {
    private Foo foo;
    @Mock private Appender appender;
    @Captor private ArgumentCaptor captor;

    @Before
    public void setUp() throws Exception {
        foo = new Foo();
        MockitoAnnotations.initMocks(this);
        Logger.getRootLogger().addAppender(appender);
    }

    @After
    public void tearDown() throws Exception {
        Logger.getRootLogger().removeAllAppenders();
    }

    @Test
    public void testSomething() {
        String result = foo.something();
        assertEquals(result,"test");
        verify(appender).doAppend(((LoggingEvent) captor.capture()));
        LoggingEvent loggingEvent = (LoggingEvent) captor.getValue();
        assertEquals(loggingEvent.getRenderedMessage(), "doing foo test");
    }
}
Wanted but not invoked:
appender.doAppend(<Capturing argument>);
-> at <package>.testSomething(FooTest.java:22)
Actually, there were zero interactions with this mock.

有没有更简单的方法来完成我想要的?如果这是最好的方法,那么我做错了什么?

共有1个答案

计和顺
2023-03-14

当然可以!

  • 创建您自己的自定义内存中单例appender
  • 修改测试记录器配置,以便除了要进行的所有其他日志记录之外,还记录到此追加程序
  • clear()在每次测试期间清除它@begin
  • 断言-在测试结束前正常测试它。

实际上,SLF4J已经有了一个实现,您可以查看它。

 类似资料:
  • 我们正在使用REST保证来测试一些REST服务。我们需要将请求和响应日志重定向到Log4j日志。我们有以下代码来测试日志重定向: 我们将以下日志输出到log4j文件: 在system.out,我们看到请求和响应的REST保证输出。该输出没有重定向到Log4j文件。如何将控制台输出重定向到Log4j文件?

  • 我有一个应用程序使用JUL日志记录。我正在将它切换到Log4j2,而当使用Gradle运行jUnit测试时,日志记录的奇怪行为令我感到困惑。 示例简化示例:测试 log4j2.xml放在资源文件夹中: Build.Gradle 当我在Idea(使用Idea自己的测试运行器)或Eclipse中运行测试时,我会在控制台中打印以下内容: 当我从CLI使用Gradle运行它或使用Gradle runner

  • 如何为写在服务或控制器类中的方法中的日志语句编写JUnit测试用例。

  • 我在JUnit测试类中使用Javautil日志(JUL),JUL在默认配置中工作(即打印到控制台)。 使用和注释的方法中的日志语句在执行时将被打印,但“@Test”方法中的日志仅在所有测试执行完成后才被打印。 不确定到底是哪里出了问题,因为同样的方法在更早的时候就起作用了。 记录器实例化: 记录器用途: 测试用例使用maven运行。我注意到,只有在我开始使用这个surefire配置并行运行测试类后

  • 问题内容: 是否可以通过JUnit测试用例以某种方式拦截日志记录(SLF4J + logback)并获取(或其他可读的信息)…? 问题答案: 您可以创建自定义附加程序 并配置logback-test.xml以使用它。现在我们可以检查测试中的日志记录事件:

  • 问题内容: 我将SLF4J与LOG4J一起使用,并且配置通常在中,并且它将日志级别设置为INFO。 但是,在测试期间,我想将日志设置为DEBUG。 我看不到一种自动执行此操作的方法,也无法让类似的内容仅在测试期间加载。 因此,我尝试在测试设置(@BeforeClass)中以编程方式执行此操作: 没有成功… 我正在使用以下版本: 我怎样才能达到这个结果? 编辑: 我认为我还不够清楚。这个问题不是关于