如何处理Android JUnit测试中的日志记录?

如何处理Android JUnit测试中的日志记录?,第1张

概述我想在模型类中记录信息 – 不一定是为了单元测试目的,而是为了我试图调试的现实生活场景. 但是,如果我尝试使用android.util.Log方法,运行JUnit测试时会出现以下错误: java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mock 我想在模型类中记录信息 – 不一定是为了单元测试目的,而是为了我试图调试的现实生活场景.

但是,如果我尝试使用android.util.Log方法,运行JUnit测试时会出现以下错误:

java.lang.RuntimeException: Method d in androID.util.Log not mocked. See http://g.co/androIDstudio/not-mocked for details.

我理解为什么会发生这种情况,我不应该在设计为独立于框架的模型类中使用AndroID框架代码!我并不是在反对这个错误,而是试图找到解决这个问题的方法.

我有一个想法,这有意义吗?

沿着这些行创建一个CustomLog类:

public class CustomLog {    private static ILogger mLogger;    public static voID setLogger(ILogger logger) {        mLogger = logger;    }    public static voID e(String tag,String message) {        mLogger.e(tag,message);    }}

ILogger是一个具有执行日志功能所需方法的接口(e,d等方法……)

我可以创建一个使用androID.util.Log方法的ILoggerImpl,以及一个只打印到System.out.println和/或什么都不做(或其他任何东西!)的MockLogger类.

我认为这完全符合我的需求(我需要在生命周期的早期设置我的CustomLog类,但这不是一个大问题).

但是,如果我需要将第三方库/外部代码添加到我的模型类中,如果新库/代码使用androID.util.Log方法,则可能会以相同方式再次中断.

那么,我可以使用“抓住所有”类型的行为吗?你怎么看?

解决方法 解决你引用的“Not mocked”异常的一种方法是 use PowerMockito to mock the Logging methods.而不是调用powermockito.mockStatic(Log.class);如链接答案中所述,您可以从 this获取灵感,并使用powermockito替换()AndroID.util的Log.v,Log.d,Log.i& Log.e使用将运行System.out.println的方法.这允许您在AndroID Studio的“运行”窗口中查看记录的消息.

String[] logMethods = {"v","d","i","e"};InvocationHandler systemOutPrintln = new InvocationHandler() {    @OverrIDe    public Object invoke(Object proxy,Method method,Object[] args) throws Throwable {        StringBuilder messageBuilder = new StringBuilder();        for (int i = 0; i < args.length; i++) {            String arg = args[i].toString();            messageBuilder.append(arg);            // add separators,ASCII art,...        }        System.out.println(messageBuilder);        return messageBuilder.toString().length();    }};for (String logMethod : logMethods) {    replace(method(Log.class,logMethod,String.class,String.class)).with(systemOutPrintln);    replace(method(Log.class,Throwable.class)).with(systemOutPrintln);}

免责声明:我不确定以上是否是最惯用的实现.

总结

以上是内存溢出为你收集整理的如何处理Android JUnit测试中的日志记录?全部内容,希望文章能够帮你解决如何处理Android JUnit测试中的日志记录?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1123957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存