【发布时间】:2017-07-26 19:17:51
【问题描述】:
我想在模型类中记录信息 - 不一定用于单元测试目的,而是用于我尝试调试的现实生活场景。
但是,如果我尝试使用 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 方法,这可能会以同样的方式再次中断。
那么,有没有我可以使用的“包罗万象”类型的行为?你怎么看?
【问题讨论】:
-
您可以使用
System.out.println(),这可能并不完美,但会显示在测试输出中。 -
当然。我在这里解释说:“我可以创建一个使用
android.util.Log方法的ILoggerImpl,以及一个简单地打印到System.out.println和/或什么都不做(或其他任何事情!)的MockLogger类。” - 我的问题是关于 如何 让它很好地工作。System.out.println用于单元测试,android.util.Log用于调试/发布非单元测试! -
哦,对了,对不起。我认为你找到了你能做到的最好的。
-
我也是这么想的 ;) - 但如果可能的话,我想得到更多的想法!不过感谢您的反馈!
标签: android unit-testing junit android-testing