2016-11-26 52 views
2

我正在爲我公司的一個Android應用程序編寫單元測試。由於某些測試檢查Logcat輸出中是否存在某些行,我想在每次測試運行前清除日誌。什麼是確保Logcat日誌清除的好方法?

我知道這樣做的基本命令是logcat -c。這個過程不是即時的,需要幾秒鐘,但因爲它發生在一個單獨的線程上,所以測試用例中的下一個命令會立即執行並可能返回不正確的結果。一種解決方法是添加強制等待。所以我的基本代碼如下所示:

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」的錯誤。

任何人有任何解決方案?

+3

依賴logcat輸出似乎不是編寫單元測試的好方法。有一個'Log'的包裝(如'Timber')並驗證與它的交互似乎是一個更好的方法。 – Emmanuel

回答

0

代替在睡眠任意值()可以嘗試這一點:

工藝過程=調用Runtime.getRuntime()EXEC( 「logcat的-c」);。 process.waitFor();

相關問題