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