我想在模型类中记录信息 - 不一定是为了单元测试目的,而是在我尝试调试的现实生活场景中。如何在Android JUnit测试中处理日志记录?
但是,如果我尝试使用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);
}
}
凡是与所需方法的接口来执行日志的功能(例如,d等方法...)
我可以创建一个使用android.util.Log
方法的ILoggerImpl
,以及仅打印到System.out.println
和/或什么也不做(或其他任何东西!)的MockLogger
类。
我认为这完全符合我的需求(我需要在生命周期的早期阶段设置我的CustomLog
类,但那不是什么大问题)。但是,如果我需要将第三方库/外部代码添加到我的模型类,那么如果新的库/代码使用android.util.Log
方法,则可能会再次以相同的方式再次破坏。
那么,是否有我可以使用的“全部捕获”类型的行为?你怎么看?
您可以使用'System.out.println()',这可能不完美,但会显示在测试输出中。当然是 – zsmb13
。我在这里解释说:“我可以创建一个使用'android.util.Log'方法的'ILoggerImpl',以及一个'MockLogger'类,它可以简单地输出到'System.out.println'和/或什么也不做(或还要别的吗!)。” - 我的问题是关于如何让这个工作很好。 'System.out.println'用于单元测试,但'android.util.Log'用于调试/发布非单元测试! – Zach
噢,对不起。我认为你找到了你能做到的最好的事情。 – zsmb13