gpt4 book ai didi

java - Junit 测试日志语句

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:22 25 4
gpt4 key购买 nike

我有一个带有类 foo 的 java 8 应用程序:

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";
}
}

我正在为此编写一个 JUnit (Junit 4.11) 测试用例:

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");
}
}

我的目标是编写一个测试用例来测试 something 方法的返回值 AND 日志语句以确保正在记录某些内容。我花了几个小时在网上搜索以弄清楚如何设置 junit 来测试日志记录语句。我试过了 this , this , thisthis方法无效。

我不知道是我做错了什么还是什么。但这是我基于上一个示例的代码:

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.

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

最佳答案

当然可以!

  • 创建您自己的自定义内存中单例 Appender
  • 除了您将执行的所有其他日志记录之外,修改测试记录器配置以记录到此附加程序
  • clear() 在每次测试期间 @Begin
  • 在测试完成之前断言测试正常。

其实SLF4J已经有了an implementation你可以看看这个。

关于java - Junit 测试日志语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com