2016-08-08 20 views
0

Ich habe einige Komponententests geschrieben, um zu prüfen, ob die Protokollierung wie vorgesehen funktioniert. Zum Beispiel ist hier eine der Methoden erprobt:Testen von Android-Geräten - "logcat -c" löscht Protokolle häufiger als angenommen

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

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

I LogCat vor jedem Test spülen wollen, so dass die Protokolle aus dem vorherigen Test nicht abgeholt bekommen. Um das zu tun, schrieb ich eine clearLogs() Methode, die von setUp() aufgerufen:

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

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

Und hier ist mein Unit-Test:

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); 
} 

Das Problem ist, dass der Log-Eintrag gelöscht wird, obwohl clearLogs() ist nur in setUp() aufgerufen. Der Test funktioniert, wenn ich clearLogs() auskommentiere. Hat jemand eine Idee, was ich falsch mache?

Antwort

0

Nach einigen Wochen habe ich endlich die Ursache entdeckt: logcat -c löscht die Logs nicht sofort, sondern dauert einige Sekunden. Der Prozess erscheint jedoch aus der Sicht der Testanwendung. Daher wird der Testfall sofort ausgeführt und ausgeführt, während die Protokolle noch gelöscht werden. Durch das Hinzufügen einer kurzen Verzögerung von zwei Sekunden wurde das Problem behoben.