Android Studio - Anwendungsdaten für Instrumentation Test löschen

Wie kann ich Android Studio (AndroidJunitRunner) dazu bringen, Anwendungsdaten vor einem Instrumentierungstest zu löschen, ohne @ manuell auszuführeadb Befehl

Ich entdeckte, dassandroid.support.test.runner.AndroidJUnitRunner Art von Cheats - es ruft nie tatsächlichconnectedCheck oderconnectedAndroidTest.

Wenn von der Kommandozeile ausgeführt$ gradle connectedCheck

:MyMainApp:assembleDebug UP-TO-DATE
:MyMainApp:assembleDebugTest UP-TO-DATE
:MyMainApp:clearMainAppData
:MyMainApp:connectedCheck

Wenn Sie in der IDE auf die Konfiguration des Instrumentationstests klicken (grünes Android-Roboterlogo mit roten / grünen Pfeilen)

**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**

ie Sie sehen können, ist das letzte Gradle-ZielassembleDebugTest

Ich hatte einen Haken auf @ hinzugefüconnectedCheck imbuild.gradle, um die Daten der Haupt-App zu löschen, bevor der Instrumentierungstest gestartet wird.

// Run 'adb' shell command to clear application data of main app for 'debug' variant
task clearMainAppData(type: Exec) {
    // we have to iterate to find the 'debug' variant to obtain a variant reference
    android.applicationVariants.all { variant ->
        if (variant.name.equals("debug")) {
            def clearDataCommand = ['adb', 'shell', 'pm', 'clear', getPackageName(variant)]
            println "Clearing application data of ${variant.name} variant: [${clearDataCommand}]"
            commandLine clearDataCommand
        }
    }
}
// Clear Application Data (once) before running instrumentation test
tasks.whenTaskAdded { task ->
    // Both of these targets are equivalent today, although in future connectedCheck
    // will also include connectedUiAutomatorTest (not implemented yet)
    if(task.name.equals("connectedAndroidTest") || task.name.equals("connectedCheck" )){
        task.dependsOn(clearMainAppData)
    }
}

Mir ist klar, dass ich alternativ einen "Daten löschen" -Button in der Haupt-App implementieren und die Instrumentierungs-App durch die Benutzeroberfläche klicken lassen könnte, aber ich finde diese Lösung unerwünscht.

Ich sahAndroidJUnitRunner API und es gibt Hooks überRunlistener interface, aber Hooks befinden sich im Kontext der Test-App, d. h. auf dem Gerät, und Android verbietet einer App, eine andere App zu ändern.http: //junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.htm

Beste Antwor geht an Sie, wenn Sie mir helfen können, in Android Studio automatisch eine der folgenden Aktionen auszulösen:

eine Befehlszeile ausführenadb shell pm clear my.main.app.package,oder rufe vorzugsweise meine Gradle-Aufgabe aufclearMainAppData

Ich bin auch ganz Ohr, wenn es einen alternativen Weg gibt. Sicherlich sollte es bei der Automatisierung von Gerätetests einen klaren Weg geben, Anwendungsdaten zu löschen?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage