gpt4 book ai didi

java - 如何使用 JMockIt 对 Log4j 进行单元测试?

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:23 24 4
gpt4 key购买 nike

当使用静态方法在类中声明 Logger(或任何静态字段)时:

public class Foo {
private static final Logger LOGGER = Logger.getLogger(Foo.getClass);
}

断言调用其上的方法(用于审计)的正确方法是什么?

下面的会起作用,但是 setField 似乎是错误的方法,取消了 @Tested 注释的使用以允许自动注入(inject)。

@Mocked Logger logger
new Expectations() {
{
setField(unitUnderTest, logger);
}
}

JMockIt 似乎通过@UsingMocksAndStubs(Log4jMocks.class) 提供了一个解决方案,但是这不允许对其进行期望,因为它会导致调用 getLogger() 返回一个真实但无用的 Logger而不是模拟实例。

最佳答案

很简单:

@Test
public void verifyAuditing(@Cascading final Logger logging)
{
// Call code under test which will create auditing records.

new Verifications() {{ logging.info("expected audit info"); }};
}

@Cascading 的使用导致 Logger 在“级联”模式下被模拟,其中每个返回引用类型的方法都会自动创建一个模拟实例。初始模拟实例 logging 表示所有此类实例。

关于java - 如何使用 JMockIt 对 Log4j 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515929/

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