gpt4 book ai didi

java - 在 junit 测试期间禁用记录器?

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:26 25 4
gpt4 key购买 nike

是否可以在测试期间禁用记录器的执行?

我有这门课

public class UnitTestMe {

private final MockMe mockMe;
private final SomethingElse something;

private final Logger logger = LoggerFactory.getLogger(this.getClass().getClass());

public UnitTestMe(MockMe mockMe, SomethingElse something) {
this..
}

public toTest() {
logger.info("Executing toTest. MockMe a: {}, Foo: b: {}", mockMe.toString(), something.foo().bar());
mockMe.execute();
}
}

我的单元测试失败并出现 NullPointerException,因为 something.foo() 不是模拟对象(我正在使用 mockito 和 nicemock)。

如何在不删除记录器语句并且不模拟依赖项的不相关部分(如 something)的情况下测试此类?

编辑:在这种情况下,某些东西是客户对象,它未在 toTest() 函数中使用,但在该类的其他部分中需要。我在记录器语句中使用 Customer 类将操作与用户相关联。

编辑 2:模拟记录器对象会有帮助吗?我假设我会再次得到一个 NullPointerException,因为“something”对象的方法也被执行了。

最佳答案

糟糕的回答:首先将此记录器的日志记录级别降低到WARNERROR。然后,用 isInfoEnabled() 包围日志语句:

if(logger.isInfoEnabled())
logger.info("Executing toTest. MockMe a: {}, Foo: b: {}", mockMe.toString(), something.foo().bar());

更好的:您使用某些对象仅用于日志记录看起来有点奇怪,因此当您测试 toTest() 方法时,会使用模拟依赖项仅用于记录。我知道这只是一个例子,但看起来存在一些设计缺陷。为了简单起见,我也建议模拟 SomethingElse

关于java - 在 junit 测试期间禁用记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605181/

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