我需要执行单元测试,在应用程序中发生特定情况时,我需要检查是否记录错误消息。
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.
有两种方法可以做到这一点:
- 您转向 Powermock 或 Powermokito;因为这些模拟框架将允许您模拟/检查对 Log.e() 的静态调用。
- 您可以考虑替换静态调用。
Example:
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) https://stackoverflow.com/questions/34323909/verify-static-method-call-using-powermockito-1-6 or 这里(powermock) http://www.michaelminella.com/testing/how-to-mock-static-methods.html。郑重声明:下次尝试使用您最喜欢的搜索引擎。你确实不是第一个问这个问题的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)