adb
コマンドを手動で実行せずに、インストルメンテーション テストの前に Android Studio (AndroidJunitRunner) にアプリケーション データをクリアさせるにはどうすればよいですか?
私はその種のチートを発見しました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]**
ご覧のとおり、最後のgradleターゲットは
assembleDebugTest
インストルメンテーション テストを開始する前に、メイン アプリのデータをクリアするため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)
}
}
別の方法として、メイン アプリに「データのクリア」ボタンを実装し、インストルメンテーション アプリに UI をクリックさせることもできますが、その解決策は望ましくないと思います。
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
、 - またはできれば私のgradleタスクを呼び出す
clearMainAppData
別の方法があれば、私もすべての耳です。確かに、デバイス テストの自動化により、アプリケーション データをクリアする明確な方法があるはずですか?
ありがとうございました!