Android Studio - очистить данные приложения для Instrumentation Test
Как заставить Android Studio (AndroidJunitRunner) очищать данные приложения, предшествующие тестированию инструментов, без запуска вручнуюadb
команда?
Я обнаружил, чтоandroid.support.test.runner.AndroidJUnitRunner
виды читов - это никогда не вызываетconnectedCheck
или жеconnectedAndroidTest
.
При запуске из командной строки$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE
:MyMainApp:assembleDebugTest UP-TO-DATE
:MyMainApp:clearMainAppData
:MyMainApp:connectedCheck
При запуске из среды IDE, щелкнув конфигурацию контрольно-измерительных приборов (зеленый логотип робота Android с красными / зелеными стрелками)
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
Как видите, последняя цель GradleassembleDebugTest
Я добавил крючок наconnectedCheck
вbuild.gradle
очистить данные основного приложения перед началом контрольно-измерительной аппаратуры.
// 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)
}
}
Я понимаю, что в качестве альтернативы я мог бы реализовать кнопку «очистить данные» в главном приложении и заставить инструментальное приложение щелкать по интерфейсу, но я считаю, что это решение нежелательно.
я смотрел наAndroidJUnitRunner
API и есть хуки черезRunlistener
интерфейс, но перехваты находятся в контексте тестового приложения, т. е. работает на устройстве, и Android запрещает одному приложению изменять другое приложение.http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
Лучший ответ обращается к вам, если вы можете помочь мне автоматически вызвать одно из следующих действий в Android Studio:
выполнить командную строкуadb shell pm clear my.main.app.package
,или, предпочтительно, вызвать мою задачу GradleclearMainAppData
Я также все уши, если есть альтернативный путь, Конечно, с автоматизацией тестирования устройств должен быть четкий способ очистки данных приложения?
Спасибо!