1

非常に多くのライブラリを使用する 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 が引き続き発生します。私が探しているのは、この問題を実際に修正して実行するために他の人が何をしたかを確認することです。

4

1 に答える 1