非常に多くのライブラリを使用する Android アプリがあり、MultiDex-ing を使用する必要があります。残念ながら、マルチデクシングを導入したとき、既存の Robolectric 単体テストは実行されなくなり、起動すらしなくなりました。マルチデクシングを追加する前に、それらは完全に正常に実行されました。
github の元のバグ投稿を参照する
https://github.com/robolectric/robolectric/issues/1328
と提案されたソリューション
https://github.com/robolectric/robolectric/pull/1457
単体テストをまだ実行できていません。
以下は、build.gradle ファイル バージョン 1 のスニペットで、最新の robolectric スナップ ショットと、コードで使用できる ShadowMultiDex.java を取得しようとしています。
buildscript {
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
dependencies {
classpath 'org.robolectric:robolectric-gradle-plugin:0.14.+'
}
}
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
apply plugin: 'android'
apply plugin: 'robolectric'
apply plugin: 'com.android.application'
...
android {
// other things
...
sourceSets {
androidTest {
setRoot('src/test')
resources.srcDirs = ['assets']
}
}
}
dependencies {
// regular
...
// unit testing
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar')
androidTestCompile('com.squareup:fest-android:1.0.+') {
exclude group: 'com.android.support'
}
androidTestCompile 'com.google.dexmaker:dexmaker:1.+'
androidTestCompile('junit:junit:4.11') {
exclude module: 'hamcrest-core'
}
androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'org.robolectric:android-all:+'
androidTestCompile 'org.robolectric:shadows-multidex:3.0-SNAPSHOT'
androidTestCompile('org.robolectric:robolectric:3.0-SNAPSHOT') {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-provider-api'
}
コンテンツを含む org.robolectric.Config.properties ファイルも作成しました
shadows=org.robolectric.shadows.ShadowMultiDex
上記を踏まえて、テスト クラスに進み、小さなテストに ShadowMultiDex を含めます。
@RunWith(RobolectricGradleTestRunner.class)
@Config(shadows = {ShadowMultiDex.class})
public class AppVersionTest extends MyBaseTest {
@Before
@Override
public void setUp() throws Exception {
super.setUp();
}
@Test
public void testIsDefaultTrue() {
// setup
AppVersion appVersion = new AppVersion(null);
// run
boolean result = appVersion.isDefault();
// verify
assertThat(result).isTrue();
}
}
単体テストを実行すると、アプリケーションとそのメタデータを設定するために NullPointerException が引き続き発生します。私が探しているのは、この問題を実際に修正して実行するために他の人が何をしたかを確認することです。