5 java logging unit-testing mocking
是否可以在测试期间禁用记录器的执行?
我有这门课
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试失败并出现NullPointerException,因为something.foo()不是模拟对象(我使用mockito和nicemock).
如何在不删除logger语句的情况下测试此类,而不模拟依赖项的不相关部分,如something
?
编辑:在这种情况下,某些东西是客户对象,该功能未在toTest()
函数中使用,但在此类的其他部分中需要.我在logger语句中使用Customer类将操作与用户关联起来.
编辑2:模拟记录器对象会有帮助吗?我会假设我会NullPointerException
再次得到一个,因为`something'对象的方法也被执行了.
糟糕的答案:首先降低此记录器的记录WARN
级别。ERROR
然后,用以下内容包围日志记录语句isInfoEnabled()
:
if(logger.isInfoEnabled())
logger.info("Executing toTest. MockMe a: {}, Foo: b: {}", mockMe.toString(), something.foo().bar());
Run Code Online (Sandbox Code Playgroud)
更好的一个:您仅使用某个对象进行日志记录看起来有点奇怪,因此当您测试方法时toTest()
,模拟依赖项仅用于日志记录。我知道这只是一个示例,但看起来存在一些设计缺陷。SomethingElse
为了简单起见,我也建议嘲笑。
归档时间: |
|
查看次数: |
3552 次 |
最近记录: |