私の会社のAndroidアプリの単体テストを書いています。いくつかのテストでは、Logcat出力に特定の行が存在するかどうかを確認するため、各テストを実行する前にログをクリアします。Logcatログをクリアするには、どのような方法が良いですか?
私が知っている基本的なコマンドは、logcat -c
です。このプロセスは瞬間的ではなく数秒かかりますが、別のスレッドで発生するため、テストケースの次のコマンドがすぐに実行され、誤った結果が返される可能性があります。 1つの回避策は、強制待機を追加することです。だから、私の基本的なコードは次のようになります:
private void clearLogs() throws Exception {
Runtime.getRuntime().exec("logcat -c");
Thread.sleep(2000);
}
これまでのところ問題はありませんでした。しかし、私のマネージャーは、ログのクリアに任意の時間がかかるケースをコードが処理できるようにしたいと考えています。たとえば、ログのクリアに20秒かかってしまうという仮説的な状況があるとします。これをどうやってやりますか?
NOW=$(date +"%m-%d %H:%M:%S.000") ; adb logcat -T "$NOW"
これは通常、完全にloogsをクリアする必要がなくなります。
私は、特定のタイムスタンプの後に書かれているだけのエントリを取得するには、フィルタを作成する必要が解決策を見つけました。しかし、Logcatが私に "無効なオプション - T"エラーを出すので、私にとってはうまくいきません。誰でも解決できますか?代わりに、睡眠中の任意の値の
logcat出力に依存することは、単体テストを書くうまい方法ではないようです。 'Log'の周りに' Timber'のようなラッパーを置いて、それとのやりとりを確認する方が良い方法です。 – Emmanuel