gpt4 book ai didi

java - 在 log4j 2.9.0 中使用 JMockit 的问题

转载 作者:行者123 更新时间:2023-12-01 14:28:44 26 4
gpt4 key购买 nike

我正在尝试使用 JMockit 来测试某个日志记录操作是否发生:

public class LogClass1 {

public void doLog() {
Logger logger = LogManager.getLogger(LogClass1.class);
logger.info("This is a log message for {}", "arg1");
}
}

public class LogClass1Test {

@Mocked
private Logger logger;

@Tested
private LogClass1 x;

@Before
public void setup() {
x = new LogClass1();
}

@Test
public void testDoLog() {
new Expectations() {
{
logger.info("This is a log message for {}", "arg1");
}
};
x.doLog();
}

}

但这会导致“缺少对 org.apache.logging.log4j.Logger#info 的 1 次调用”错误。

我过去用 log4j 1.x 做过类似的模拟,但我没有遇到过这个问题。我想知道是否存在一些问题,因为 log4j 2.x 似乎有更多的 info() 方法重载。

我尝试在单元测试中将 "arg1" 更改为 (Object)"arg1" 以查看是否可以使其与签名匹配。这没有帮助。

关于如何让它发挥作用有什么想法吗?

最佳答案

注意Logger是一个接口(interface)LogClass1通过LogManager.getLogger获取它的一个实例> 静态工厂方法。所以,很明显,它创建了一些 Logger 实现类的实例。并且说类(class)在测试中没有被 mock 。

测试需要做的是模拟LogManager,所以返回@Mocked Logger实例。即在测试类中添加一个@Mocked LogManager字段。

(此外,不需要 setup 方法,因为 @Tested 会自动创建一个实例。)

关于java - 在 log4j 2.9.0 中使用 JMockit 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46385489/

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