2016-08-08 6 views
0

ログが意図したとおりに機能しているかどうかを確認するために、いくつかのユニットテストを書いています。例えば、ここでテストされている方法の一つである:Androidユニットのテスト - 「logcat -c」は、ログよりも頻繁にログを消去しています

// from my SampleObject class 
public void configure(Context context) { 

    Log.d(TAG, "Configuration done."); 
} 

私は前のテストからのログがピックアップされないように、各テストの前にLogCatをフラッシュします。

private void clearLogs() throws Exception { 
    Runtime.getRuntime().exec("logcat -c"); 
} 

public void setUp() throws Exception { 
    super.setUp(); 
    clearLogs(); 
    SampleObject mSampleObject = new SampleObject(); 
} 

そして、ここでは私のユニットテストです::これを行うには、私はsetUp()から呼び出されclearLogs()方法を書いた

public void testConfigure() throws Exception { 
    String LOG_CONFIGURATION_DONE = "Configuration done."; 
    boolean stringFound = false; 
    mSampleObject.configure(new MockContext()); 
    Process process = Runtime.getRuntime().exec("logcat -d SampleObject:D *:S"); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    String line = ""; 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.contains(LOG_CONFIGURATION_DONE)) { 
      stringFound = true; 
      break; 
     } 
    } 
    assertTrue("Log message for configure() not found", stringFound); 
} 

問題は、ログエントリがclearLogs()だけであってもクリアされていることですsetUp()で呼ばれています。私がclearLogs()をコメントアウトすると、テストが機能します。誰でも私が間違っていることを考えている?

答えて

0

数週間後、私はついに原因を発見しました:logcat -cはすぐにログをクリアしませんが、それを行うには数秒かかります。ただし、プロセスはテストアプリケーションの観点から表示されます。その結果、テストケースは直後に実行され、ログがクリアされている間に実行されます。 2秒の短い遅延を加えて問題を解決しました。