在我的代码中,我有一个try-finally方法。我不想最后阻止我的单元测试。我可以在我的类中模拟整个finally块,因为在我的情况下它只是记录吗?我是使用PowerMockito进行单元测试。
try {
String foo = obj.myMethod();
} finally {
logger.info(obj.webService());
}
答案 0 :(得分:2)
您编写的课程将调用logger.info(obj.webService())
,因此您的测试应该练习。
根据是否在测试中运行,让您的被测试课程做不同的事情并不是一个好主意。所有你可以改变的是它的协作者,通常用模拟代替它们。
在这种情况下,obj
是协作者。所以注入obj
的模拟。根据测试的意图,使用默认值可能就足够了,因此记录器将记录null
,或者您可能需要指定when
以使obj.webService()
返回有效值对象,或者您甚至可能想要验证它是否已被调用。
答案 1 :(得分:0)
在评论中,您声明要避免在测试期间调用您的Web服务。
在我回来的时候,我不希望我的网络服务有任何价值。
如果您的应用程序的日志级别设置设置为WARNING或更高,我认为您也不想要这个。 (我在这里假设java默认日志记录)
解决方案很简单:使用记录表格,其中Supplier
:Logger.info(Supplier<String> msgSupplier)
所以你的终结块会变成:
} finally {
logger.info(() -> obj.webService());
}
然后,对于您的测试或生产中的问题,只需将您的日志记录设置为Level.NONE,供应商将永远不会被执行。