私はモデルクラスに情報を記録したいと思います。単体テストの目的ではなく、デバッグしようとしている現実のシナリオのために必要です。私はJUnitテストの実行時に、私は次のエラーを取得android.util.Log
メソッドを使用しようとした場合Android JUnitテストのログを処理する方法は?
しかし、私はこれが発生する理由を理解
java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.
を、私はモデルクラスにAndroidのフレームワークのコードを使用してはならないことフレームワークに依存しないように設計されています。私は実際にエラーに反対して論争しているのではなく、むしろこれを回避する方法を見つけようとしています。
私には1つのアイデアがありますが、これは意味がありますか?
これらの線に沿ってCustomLog
クラスを作成します(...などE、D、メソッド)は、ログ機能を実行するために必要なメソッドとのインターフェースである
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);
}
}
を
I android.util.Log
メソッドを使用するILoggerImpl
と、System.out.println
に出力するだけのMockLogger
クラスを作成できます。また、何もしません。
私のニーズに完全に合っていると思います(ライフサイクルの早い段階で私のCustomLog
クラスをセットアップする必要がありますが、それは大きな問題ではありません)。
しかし、サードパーティのライブラリ/外部コードをモデルクラスに追加する必要があった場合は、新しいライブラリ/コードでandroid.util.Log
メソッドを使用すると、同じ方法で再度破損する可能性があります。
だから、私が使うことができる「すべてを捕まえる」という振る舞いはありますか?どう思いますか?
'System.out.println()'は完全ではないかもしれませんが、テスト出力に現れます。 – zsmb13
間違いなく。私はここで説明しました: "私は' android.util.Log'メソッドを使う 'ILoggerImpl'と、単に' System.out.println'に出力したり、何もしない 'MockLogger'クラスを作ることができました。他に何か!)。" - 私の質問は、これがうまく動作するように_how_に関係しています。 'System.out.println'は単体テストですが、' android.util.Log'はデバッグ/リリースの非単体テストです! – Zach
ああ、申し訳ありません。私はあなたが本当にできる最高のものを見つけたと思う。 – zsmb13