繁体   English   中英

如何在android中单元测试Log.e?

[英]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.

有两种方法可以做到这一点:

  1. 你转向Powermock或Powermokito; 因为那些模拟框架将允许您模拟/检查对Log.e()的静态调用。
  2. 您可以考虑替换静态调用。

例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM