Androidスタジオとロボレクトリックとエスプレッソを組み合わせるために、さまざまなアプローチを試みました。このサンプルプロジェクトのセットアップで終了しましたhttps://github.com/nenick/android-gradle-template
ここで、さまざまなアプローチについて説明します。
アプリケーション モジュール + エスプレッソ + ロボレクトリック
Robolectric メンテナーによってサポートされているhttps://github.com/robolectric/deckard-gradleの例があります。これはプラグインhttps://github.com/robolectric/gradle-android-test-pluginに基づいています。しかし、これにはhttps://github.com/robolectric/gradle-android-test-plugin/issues/17で報告されている依存関係の汚染に関する欠点があり、espresso テストのコンパイル時間と実行時間が遅くなります。
すべてを組み合わせた build.gradle スニペット
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.+'
}
}
apply plugin: 'android'
apply plugin: 'android-test'
android {
defaultConfig {
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
}
androidTest {
include '**/*Test.class'
exclude '**/espresso/**/*.class'
}
dependencies {
androidTestCompile('junit:junit:4.11')
androidTestCompile('org.robolectric:robolectric:2.3-SNAPSHOT')
androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2'
}
別のエスプレッソ
例はhttps://github.com/stephanenicolas/Quality-Tools-for-Androidに示されていますが、かなり時代遅れで、いくつかの欠点もありました。再コンパイルされ、Androidスタジオの動作が奇妙になります。espresso テスト モジュールの (ルート ソース) としてアプリケーション モジュール ソースにフラグを立てます。それは機能しますが、直感的ではありません。
espresso モジュールの build.gradle スニペット
dependencies {
androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2'
}
android {
sourceSets {
main {
manifest.srcFile '../AndroidSample/AndroidManifest.xml'
java.srcDirs += ['../AndroidSample/src/main/java']
resources.srcDirs = ['../AndroidSample/res']
res.srcDirs = ['../AndroidSample/res']
}
}
defaultConfig {
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
}
ロボレクトリックを実行する
robolectric テストを個別のパッケージに入れることを可能にするプラグインhttps://github.com/novoda/gradle-android-test-pluginが存在します。このプロジェクトのセットアップは私にとって素晴らしいものです:
- MyProject
|- app (with espresso tests)
|- - build.gradle (app)
|- robolectric (unit tests)
|- - build.gradle (robo)
build.gradle (アプリ + エスプレッソ) スニペット
dependencies {
androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2'
}
android {
defaultConfig {
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
}
build.gradle (ロボ) スニペット
buildscript {
repositories {
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
classpath "com.novoda:gradle-android-test-plugin:0.9.8-SNAPSHOT"
}
}
android {
projectUnderTest ':AndroidSample'
}
apply plugin: 'java'
apply plugin: 'android-test'
dependencies {
testCompile 'junit:junit:4.11'
testCompile 'org.mockito:mockito-core:1.9.5'
testCompile 'com.squareup:fest-android:1.0.+')
testCompile ('org.robolectric:robolectric:2.3-SNAPSHOT')
}
このプロジェクトのセットアップをセットアップしようとすると、いくつかの落とし穴があるため、実際の例から始めてください: https://github.com/nenick/android-gradle-template