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)
来包围它吗?永远不要用catchNullPointerException
。
@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());