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


87

私はテストの世界、さらにはAndroidのテストの世界に不慣れです。アンドロイドでのテストを支援するロボレクトリックの研究をしている間、1つのことが私を最も混乱させます。WebtestCompileで、Robolectricを参照するときに、gradleビルドスクリプトの依存関係でキーワードを使用している人を見ることがありますが、他の人はを使用していますandroidTestCompile。確かに両方が有効になることはできませんか?

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

回答:


120

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

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


ありがとう。それは私が最初に考えたものですが、そうであれば、testCompileでロボレクトリック依存を参照するものとandroidTestCompileで参照するものがあります。それは統合テストを書くのに役立つライブラリではありませんか?もしそうなら、それはandroidTestCompileで参照されるべきではありませんか?ただし、robolectricの公式ガイドでさえtestCompileを使用するように指示しています...申し訳ありませんが、ご覧のとおり、現時点では混乱しすぎています。
ルーカス

3
命名規則は少し奇妙です。基本的に、単体テスト(デバイスで実行されないテスト)を作成している場合、それらは 'src / test'に存在するため、それらの依存関係はtestCompile構成に属します。androidTestCompile構成に追加された依存関係は、「src / androidTest」のソースでのみ使用できます。これは、実際にはAPKに組み込まれ、デバイスにデプロイされます。
マークビエイラ

私をある方向に向けてくれてありがとう。それは私のすべての質問に答えたわけではありませんが、それは私の研究中に私を助けました。あなたが言ったことを明確にするために、ユニットテストはテストフォルダにあるものだけではありません(デフォルト)。皮肉なことに、グーグルは時々androidTestにあるテストをユニットテストとしても呼び出します。もちろん、特定のテストの目的に依存しますが、それでも混乱を助長します。
ルーカス

1
これは主にセマンティクスなので、私はそれらにとらわれることはありません。Roboelectricで作成されたテストの多くは、間違いなく統合テストであり、とにかく単体テストではありません。そうは言っても、この2つの主な違いは、「src / test」は標準のJVMの開発者マシンで実行され、「src / androidTest」はAPKにパッケージ化され、実際のデバイス(またはエミュレーター)で実行されることです。
マークビエイラ

1
以前に見た「src / test」のサポートは、標準のGradleJavaプラグインを介して利用できるものだったと思います。したがって、ビルドフレーバーまたはタイプのサポートはありませんでした。Androidプラグインは、単体テストを完全にサポートするようになり、バリアントごとの単体テストソースセットが含まれるようになりました。
マークビエイラ2015年

3

あなたの質問に答えるには-robolectricにtestCompileを使用してください

robolectricはJVM上で実行され、すべてのAndroidデバイスの動作をモックしているためです。

testCompileとandroidTestCompileは、Androidプラグインによって提供されるタスクの実行中にgradleが使用する「慣例による」Androidフォルダーです。

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

繰り返しますが、これらは、これらの構成のソースセットを提供できるコンベンションフォルダーによるものです。

注:エスプレッソは、ロボレクトリックから離れようとする素晴らしいライブラリです:)


1

//ユニットテスト

testCompile 'junit:junit:4.12'

上記のコードは、AndroidStudioのbuild.gradleファイルにあるJUnit4の依存関係です。JUnitはJVMで実行され、実行するのにデバイスやエミュレーターを必要としないため、testCompileがあることがわかります。これは、JUnitテストを実行するためにアプリケーションコンテキストを必要とせず、必要な場合はそれらを「モック」する必要があることも意味します。

//インストルメント化されたユニットテスト

androidTestCompile('com.android.support.test:runner:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

ここにandroidTestCompileが表示されます。これは、今回はデバイスまたはエミュレーターをテスト、つまりインストルメンテーションテストに使用する予定であるためです。ベターを明確にするために、developer.android.comから読むことをお勧めします


0

JVMテストまたは単体テストの依存関係を追加するには(これらのテストはJava環境のみに依存しているため、Android環境は必要ありません)。

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

dependencies {
    testCompile gradleTestKit()
}

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.