私は世界をテストするのが初めてであり、さらにAndroid世界をテストするために。Robolectricの研究をしながら、Android Webで、Robolectricを参照するときにgradleビルドスクリプトの依存関係でtestCompile
キーワードを使用している人がいる一方で、他の人がandroidTestCompile
を使用していることがあります。
誰かが両方の違いを説明できますか、Robolectricを使用するときにこれらのどちらを使用する必要がありますか?
単純にtestCompile
は単体テスト(src/testにあるもの)の構成であり、androidTestCompile
はテストAPIに使用されます(src/androidTestにあります)。単体テストを書くつもりなので、testCompile
を使用する必要があります。
更新: 2つの主な違いは、test
ソースセットが通常のJava JVMで実行されるのに対して、androidTest
ソースセットテストはAndroidデバイス(またはエミュレーター)。
質問に答えるには、robolectricにtestCompileを使用します
その理由は、robolectricがJVMですべてのAndroidデバイスの動作をモックしているためです。
testCompileとandroidTestCompileは「慣例により」Android Android plugin。
androidTestDebugはandroidTestフォルダーからテストを選択し、testDebugはテストフォルダーからテストを選択し、
繰り返しますが、これらはこれらの構成のソースセットを与えることができる慣習的なフォルダのみです
注:espressoは、robolectricから離れようとする素晴らしいライブラリです。
//ユニットテスト
testCompile 'junit:junit:4.12'
上記のコードは、Androidスタジオのbuild.gradleファイル内のJUnit 4の依存関係です。 testCompileがあり、JUnitがJVM上で実行されているため、デバイスやエミュレーターを実行する必要がないためです。また、JUnitテストは実行するためにアプリケーションコンテキストを必要とせず、必要な場合は「MOCK」する必要があります。
// Instrumented Unit Testing
androidTestCompile('com.Android.support.test:runner:0.5', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
ここでandroidTestCompileが表示されます。今回は、テストにデバイスまたはエミュレーターを使用する予定であるため、インストルメンテーションテストです。明確にするために、developer.Android.comから読むことをお勧めします。
JVMテストまたは単体テストの依存関係を追加するには(Java環境のみに依存するテストでは、Android環境)は不要です。
TestCompileディレクティブを使用します。例:
dependencies {
testCompile gradleTestKit()
}
インストルメンテーションテストの依存関係を追加するには(これらのテストは主にAndroid環境)に依存しています)、androidTestCompile
ディレクティブを使用します。