Come è possibile ottenere Android Studio (AndroidJunitRunner) per cancellare i dati dell'applicazione che precedono un test della strumentazione senza eseguire manualmente il comando adb
?Android Studio - cancellare i dati dell'applicazione per Instrumentation Test
ho scoperto che android.support.test.runner.AndroidJUnitRunner
tipo di trucchi - non è mai in realtà invoca connectedCheck
o connectedAndroidTest
.
Quando viene eseguito da linea di comando
$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE :MyMainApp:assembleDebugTest UP-TO-DATE :MyMainApp:clearMainAppData :MyMainApp:connectedCheck
Quando lanciato all'interno IDE cliccando la configurazione di prova strumentazione (verde logo robot Android con frecce rosse/verdi)
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
Come puoi vedere, l'ultimo obiettivo di gradle è
assembleDebugTest
Ho aggiunto un gancio su connectedCheck
in build.gradle
per cancellare i dati dell'app principale prima di iniziare il test della strumentazione.
// 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)
}
}
mi rendo conto che in alternativa avrei potuto implementare un pulsante 'Cancella dati' in app principale e avere l'applicazione strumenti clicca tramite l'interfaccia utente, ma trovo che la soluzione indesiderabile.
Ho esaminato l'API AndroidJUnitRunner
e ci sono ganci tramite l'interfaccia Runlistener
ma i ganci si trovano nel contesto dell'applicazione di test, ovvero in esecuzione sul dispositivo, e Android impedisce a un'app di modificare un'altra app. http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
Miglior risposta va a voi, se potete aiutarmi a avviare una delle seguenti automaticamente dall'interno di Android Studio:
- eseguire una riga di comando
adb shell pm clear my.main.app.package
, - o, preferibilmente, invocare il mio compito Gradle
clearMainAppData
Sono anche tutte le orecchie se c'è un alter nate way. Sicuramente con l'automazione dei test dei dispositivi dovrebbe esserci un modo chiaro per cancellare i dati dell'applicazione?
Grazie!
Non ci sono risposte, quindi suppongo che la maggior parte delle persone faccia affidamento solo sull'installazione dell'app come processo di inizializzazione. –
@ razzle-shazi ha fatto funzionare la soluzione nsimons per te? –