Android Studio: datos claros de la aplicación para la prueba de instrumentación
¿Cómo puedo hacer que Android Studio (AndroidJunitRunner) borre los datos de la aplicación que preceden a una prueba de instrumentación sin ejecutar manualmenteadb
¿mando?
Descubrí queandroid.support.test.runner.AndroidJUnitRunner
tipo de trampas: en realidad nunca invocaconnectedCheck
oconnectedAndroidTest
.
Cuando se ejecuta desde la línea de comando$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE
:MyMainApp:assembleDebugTest UP-TO-DATE
:MyMainApp:clearMainAppData
:MyMainApp:connectedCheck
Cuando se ejecuta desde IDE haciendo clic en la configuración de prueba de instrumentación (logotipo verde del robot Android con flechas rojas / verdes)
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
Como puede ver, el último objetivo de gradle esassembleDebugTest
Había agregado un gancho enconnectedCheck
enbuild.gradle
para borrar los datos de la aplicación principal antes de comenzar la prueba de instrumentación.
// 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)
}
}
Me doy cuenta de que, alternativamente, podría implementar un botón 'borrar datos' en la aplicación principal y hacer que la aplicación de instrumentación haga clic en la interfaz de usuario, pero encuentro que esa solución no es deseable.
MiréAndroidJUnitRunner
API y hay ganchos a través deRunlistener
interfaz, pero los ganchos son durante el contexto de la aplicación de prueba, es decir, se ejecuta en el dispositivo, y Android prohíbe que una aplicación modifique otra aplicación.http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
La mejor respuesta se dirige a usted si puede ayudarme a activar uno de los siguientes automáticamente desde Android Studio:
ejecutar una línea de comandoadb shell pm clear my.main.app.package
,o preferiblemente invocar mi tarea de gradleclearMainAppData
También soy todo oídos si hay una forma alternativa. ¿Seguramente con la automatización de pruebas de dispositivos debería haber una forma clara de borrar los datos de la aplicación?
¡Gracias!