Android Studio — clear-Anwendung Daten für Test-Instrumentierung
Wie bekomme ich Android Studio (AndroidJunitRunner) zum löschen von Anwendungsdaten, die vor einem instrumentation test ohne manuell ausgeführt adb
Befehl?
Entdeckte ich, dass android.support.test.runner.AndroidJUnitRunner
Art von cheats-es eigentlich nie ruft connectedCheck
oder connectedAndroidTest
.
-
Wenn von der Kommandozeile aus ausgeführt
$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE :MyMainApp:assembleDebugTest UP-TO-DATE :MyMainApp:clearMainAppData :MyMainApp:connectedCheck
-
Wenn Sie von innerhalb der IDE, indem Sie die Instrumentierung, die test-Konfiguration (grüne Android-Roboter-logo mit rot/grüne Pfeile)
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
Wie Sie sehen können, die letzten gradle Ziel ist
assembleDebugTest
Habe ich einen Haken auf connectedCheck
im build.gradle
löschen der Daten von der Haupt-app vor dem Start der instrumentation test.
//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)
}
}
Ich erkennen, dass alternativ könnte ich implementieren eine 'Daten löschen' - button in der Haupt-app und der Instrumentierung-app klicken Sie sich durch die UI, aber ich finde, die Lösung ist unerwünscht.
Schaute ich AndroidJUnitRunner
API und es gibt Haken, die über Runlistener
- interface, aber die Haken sind im Rahmen der test-app, d.h. es läuft auf dem Gerät und Android verbietet eine app ändern, Sie eine andere app.
http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
Beste Antwort geht zu Ihnen, wenn Sie mir helfen können, lösen Sie eine der folgenden Aktionen automatisch aus innerhalb von Android Studio:
- ausführen einer Befehlszeile
adb shell pm clear my.main.app.package
, - oder noch besser, rufen meinen gradle task
clearMainAppData
Ich bin auch ganz Ohr, wenn es einen alternativen Weg. Sicherlich mit device testing automation sollte es einen klaren Weg, um zu löschen application data?
Danke!
- Es gibt keine Antworten, so dass ich denke, dass die meisten Menschen nur verlassen sich auf die Installation der app als die Initialisierung.
- hast nsimons Lösung für Sie arbeiten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, es ist schon eine Weile her, und hoffentlich bis jetzt haben Sie dieses Problem sortiert.
Ich lief in das gleiche Problem heute, und stürzte sich hier ohne Lösung.
Aber ich schaffte es, es zu schaffen, indem Sie meinen task aus der Konfiguration testen.
Schritt 1 : Gehen Sie zu Ihrem test-Konfiguration
Schritt 2 : fügen Sie Einfach die gradle Aufgabe, die Sie erstellt
Durch die Art und Weise, die Aufgabe, in meinem Fall einfach sieht wie folgt aus :
Hoffe, dies hilft jemand 🙂
Mit Android Testen Orchestrator es ist leichter, diese option über gradle-Skript.
Unten ist der link für den Android-Test Orchestrator
https://developer.android.com/training/testing/junit-runner#using-android-test-orchestrator