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

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'对象的方法也被执行了.

Tom*_*icz 3

糟糕的答案:首先降低此记录器的记录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为了简单起见,我也建议嘲笑。