[英]How to unit test Log.e in android?
我需要执行单元测试,我需要检查在我的应用程序中发生某种情况时是否记录了错误消息。
try {
//do something
} catch (ClassCastException | IndexOutOfBoundsException e) {
Log.e(INFOTAG, "Exception "+e.getMessage());
}
我该怎么测试呢? 我在单元测试时得到以下错误。
Caused by: java.lang.RuntimeException: Method e in android.util.Log not mocked.
有两种方法可以做到这一点:
例:
interface LogWrapper {
public void e( whatever Log.e needs);
}
class LogImpl implements LogWrapper {
@Override
e ( whatever ) {
Log.e (whatever) ;
}
然后,您必须使用依赖注入来使LogWrapper
对象在您要记录的类中可用。 对于正常的“生产”用法,该对象只是LogImpl
一个实例; 对于测试,您可以使用自编写的impl(跟踪发送给它的日志); 或者您可以使用任何非强大的模拟框架(如EasyMock或Mokito)来模拟它。 然后使用模拟框架的检查/验证方面来检查“使用预期参数调用日志”。
请注意:根据您的设置,选项2可能过度。 但我个人而言,我避免使用Powermock; 仅仅因为我浪费了太多时间来追捕Powermock的奇怪问题。 我喜欢做覆盖率测量; 有时Powermock也会给你带来麻烦。
但是当你问起Powermock时,你基本上想看这里(powermockito)或者这里(powermock) 。 并且为了记录:下次尝试使用您最喜欢的搜索引擎。 这真的不像你是第一个问这个的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.