我想在模型類中記錄信息 - 不一定是爲了單元測試目的,而是在我嘗試調試的現實生活場景中。如何在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