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?