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

Java 在junit测试期间禁用记录器?,java,unit-testing,logging,mocking,Java,Unit Testing,Logging,Mocking,是否可以在测试期间禁用记录器的执行 我有这门课 public class UnitTestMe { private final MockMe mockMe; private final SomethingElse something; private final Logger logger = LoggerFactory.getLogger(this.getClass().getClass()); public UnitTestMe(MockMe mockM

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

我有这门课

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一起使用)

如何在不删除logger语句和不模拟依赖项的不相关部分(如
something
)的情况下测试此类

Edit:在本例中,某个对象是Customer对象,在
toTest()
函数中未使用,但在该类的其他部分中需要。我在logger语句中使用Customer类将操作与用户关联起来


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

回答不好:首先将此记录器的日志记录级别降低到
警告
错误
。然后,用
IsInfo()环绕日志记录语句



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

您可以使用
尝试捕获NullPointerException

如果您的测试方法想要测试NullPointerException,那么最好使用NullPointerException

@expect(NullPointerException.class)
public void testMethod() {
//your test method logic
}

您的日志语句引入了模拟
某物的额外要求。您必须让它为foo()返回一个非null值,或者重写日志语句以避免引入这些额外内容。

您可以禁止执行日志记录器

PowerMockito的用例:
你就不能用
try…catch(NullPointerException)
来包围它吗?永远不要用catch
NullPointerException
@expect(NullPointerException.class)
public void testMethod() {
//your test method logic
}
// this is to suppress for logger.error(Exception e)
PowerMockito.doNothing().when(logger, "error", (Exception) any(Exception.class));

// this is to suppress for logger.debug(String message)
PowerMockito.doNothing().when(logger, "debug",anyString());