当前位置: 首页 > 知识库问答 >
问题:

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

潘青青
2023-03-14

使用gradle def为支持v4-r21添加多索引支持(https://plus.google.com/IanLake/posts/JW9x4pcB1rj)

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()
}

现在这适用于应用程序本身,我能够构建和部署,但是当我为我的应用程序类运行机器人测试时,我从ZipUtils得到一个失败(它被MultiDex.java捕获)。其他测试运行良好。这是跟踪-

原因:java.lang.RuntimeException: Multidex安装失败(/用户/代码/android-code/android/.(是一个目录))。在BlockJUnit4ClassRunner.java:50(org.junit.runners.ParentRunner)在3.run(ParentRunner.java:238)在org.junit.runners.ParentRunner(1.schedule)在ParentRunner.java:63(org.junit.runners.ParentRunner.runChildren)在ParentRunner.java:236(org.junit.runners.ParentRunner.access)在ParentRunner.java:53(org.junit.runners.ParentRunner)在org.robolectric.RobolectricTestRunner2.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(android.support.multidex.MultiDex.install)在MultiDex.java:178android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.java:39)在android.app.Application.attachApplication.java:181(org.fest.reflect.method.Invoker.invoke)在Invoker.java:112(org.robolectric.internal.ParallelUniverse.setUpApplicationState)在ParallelUniverse.java:1550美元(org.robolectric.RobolectricTestRunner.setUpApplicationState)在RobolectricTestRunner.java:4302美元。

共有3个答案

西门嘉澍
2023-03-14

您需要创建一个继承自MultiDexApplication attachBaseContext(Context)的应用程序类,并在JavaVM上运行时粉碎异常。

  import android.content.Context;
    import android.support.multidex.MultiDexApplication;

    public class Application extends MultiDexApplication {

       @Override
       protected void attachBaseContext(Context base) {
          try {
            super.attachBaseContext(base);
          } catch (Exception e) {
            String vmName = System.getProperty("java.vm.name");
            if (!vmName.startsWith("Java")) {
               throw e;
            }
          }
       }
    }
楚浩然
2023-03-14

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

沈俊明
2023-03-14

添加multi-dex阴影作为您的依赖项:

testCompile "org.robolectric:shadows-multidex:3.0"

这将模拟MultiDex.install调用,但什么也不做,因为Robolectric中没有索引

 类似资料:
  • 所以在用kotlin类做了大量的试验和错误之后,我发现同样的代码在java中是可测试的,但在kotlin中是不可测试的。 这会导致:org . mock ITO . exceptions . mis using . missingmethodinvocationexception:when()需要一个必须是“模拟上的方法调用”的参数。比如:when(mock.getArticles())。然后返回

  • 我想配置一个Spring Boot应用程序,以便根本不使用DB。因此,我对应用程序类进行了注释,以排除JPA自动配置类: 原因:org.springframework.beans.factory.BeanCreationException:创建名为“data source”的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalStateException:无法为测试确

  • 问题内容: 我正在处理需要返回JSON数据的Web服务。 我读到我应该使用application/json,但是不确定这可能会导致什么问题? 例如,较旧的浏览器会支持吗?(IE6 +,FF,Opera等) 还是公司防火墙/代理服务器后面的用户可能阻止了MIME类型application / json? 遵循此建议,您有什么问题(如果有)? 问题答案: 让我们考虑IE。假设您有一个隐藏的iFrame

  • 问题内容: 无论我做什么,sys.exit()都被unittest调用,即使是最琐碎的例子。我无法确定我的安装是否混乱或正在发生什么。 问题答案: 您的示例也在我的安装中退出。我可以通过更改使其执行测试并保留在Python中 至 在Python库参考中可以找到更多信息。

  • 我使用的是Android Studio 3.3,我对Robolectric 3.3.2进行了一些测试。 我有多个可能有联系的问题。 > 我启动Android studio并运行我的测试类。没关系。如果修改/添加测试,则在重新运行测试时不会看到它(右键单击该类,然后运行测试)。我试图使缓存无效并重新启动、生成/重建项目。它不起作用。我必须重新启动Android Studio。 此外,我碰巧遇到一个错

  • 我有一个中等大小的Spring应用程序。当我重构一些loc时,我注意到以下行为: 事实上,注入工作正常: 当我尝试使用构造函数注入时,环境为空,我的应用程序告诉我,由于循环引用,它无法创建配置bean: 在堆栈的某个地方: 原因:org.springframework.beans.factory.Bean货币InCreationException:创建名为appConfig的bean时出错:请求的