web-dev-qa-db-ja.com

Android GradleのtestCompileとandroidTestCompileについて混乱しています

私は世界をテストするのが初めてであり、さらにAndroid世界をテストするために。Robolectricの研究をしながら、Android Webで、Robolectricを参照するときにgradleビルドスクリプトの依存関係でtestCompileキーワードを使用している人がいる一方で、他の人がandroidTestCompileを使用していることがあります。

誰かが両方の違いを説明できますか、Robolectricを使用するときにこれらのどちらを使用する必要がありますか?

86
Lucas

単純にtestCompileは単体テスト(src/testにあるもの)の構成であり、androidTestCompileはテストAPIに使用されます(src/androidTestにあります)。単体テストを書くつもりなので、testCompileを使用する必要があります。

更新: 2つの主な違いは、testソースセットが通常のJava JVMで実行されるのに対して、androidTestソースセットテストはAndroidデバイス(またはエミュレーター)。

118
Mark Vieira

質問に答えるには、robolectricにtestCompileを使用します

その理由は、robolectricがJVMですべてのAndroidデバイスの動作をモックしているためです。

testCompileとandroidTestCompileは「慣例により」Android Android plugin。

androidTestDebugはandroidTestフォルダーからテストを選択し、testDebugはテストフォルダーからテストを選択し、

繰り返しますが、これらはこれらの構成のソースセットを与えることができる慣習的なフォルダのみです

注:espressoは、robolectricから離れようとする素晴らしいライブラリです。

3
Amit Kaushik

//ユニットテスト

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から読むことをお勧めします。

1
Lazycoder_007

JVMテストまたは単体テストの依存関係を追加するには(Java環境のみに依存するテストでは、Android環境)は不要です。

TestCompileディレクティブを使用します。例:

dependencies {
    testCompile gradleTestKit()
}

インストルメンテーションテストの依存関係を追加するには(これらのテストは主にAndroid環境)に依存しています)、androidTestCompileディレクティブを使用します。

0
Subhasish Nath