MultiDexApplication的使用导致Application类的Robolectric测试中断

Ric*_*ter 20 android dex robolectric

使用gradle def(https://plus.google.com/+IanLake/posts/JW9x4pcB1rj)在支持v4-r21上添加Multi dex支持

apply plugin: 'com.android.application'

android {
compileSdkVersion 19
buildToolsVersion "20.0.0"

defaultConfig {
    applicationId "info.osom.multidex"
    minSdkVersion 19
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

dexOptions {
    preDexLibraries = false
}

afterEvaluate {
    tasks.matching {
    it.name.startsWith('dex')
    }.each { dx ->
    if (dx.additionalParameters == null) {
        dx.additionalParameters = []
    }
    dx.additionalParameters += '--multi-dex'
    dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
}
Run Code Online (Sandbox Code Playgroud)

现在这适用于应用程序本身,我能够构建和部署,但是当我为我的Application类运行robolectric测试时,我从ZipUtils(在MultiDex.java中捕获)中失败了.其他测试运行正常.这是痕迹 -

引起:java.lang.RuntimeException:Multi dex安装失败(/ Users/Code/android-code/android /.(是一个目录)).在Android.support.multiDex.install(MultiDex.java:178)的android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.java:39)android.app.Application.attach(Application.java:181)at at android.support.multidex.MultiDex.install(MultiDex.java:178) org.fest.reflect.method.Invoker.invoke(Invoker.java:112)在org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:155)在org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:430)在org.robolectric.RobolectricTestRunner $ 2.evaluate(RobolectricTestRunner.java:236)在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java :63)在org.junit.runne的org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)rs.ParentRunner.access $ 000(ParentRunner.java:53)在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:229)在org.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner.java:177)的组织. junit.runners.ParentRunner.run(ParentRunner.java:309)位于org.gradle.api.internal.tasks的org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86). testing.junit.JUnitTestClassExecuter.execute在org.gradle.api.internal.tasks(JUnitTestClassExecuter.java:49)在org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69). testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)在org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)在org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)在org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.jav)a:32)在org.gradle.api.internal.tasks的com.sun.proxy上的org.gradle.messaging.dispatch.ProxyDispatchAdapter $ DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93).$ Proxy2.processTestClass(未知来源) .testing.worker.TestWorker.processTestClass(TestWorker.java:105)

Shu*_*ary 52

添加multi-dex shadow作为依赖项:

testCompile "org.robolectric:shadows-multidex:3.0"
Run Code Online (Sandbox Code Playgroud)

这将模拟MultiDex.install调用并且什么都不做,因为Robolectric中没有dex

  • 帮忙,谢谢.只需确保此行中的版本与以下版本相同:testCompile'org.robolectric:robolectric:3.0'(否则它不会工作) (4认同)

MLP*_*CiM 4

这是一个已知错误,等待修复:https ://github.com/robolectric/robolectric/issues/1328