Multidex 后 Robolectric 单元测试失败

2024-04-06

因此,我最近将 robolectric 3.0 升级与我们的主线合并,这为我们的应用程序添加了 multidex 支持。不幸的是,这带来了不幸的副作用,导致我们的测试失败/无法运行 - 它们只会在第一次尝试安装 MultiDex 失败后停止,堆栈跟踪如下:

java.lang.RuntimeException: java.lang.RuntimeException: Multi dex installation failed (/Users/me/Data/Projects/my-android/myapp/. (Is a directory)).
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:257)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:194)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

我尝试实现各种解决方案,例如在我的 Multidex.Install 中捕获 RuntimeException (如此处所述https://github.com/robolectric/robolectric/issues/1328 https://github.com/robolectric/robolectric/issues/1328)并使用 Robolectric 提供的影子 MultiDex,但这只是失败并出现 Gradle TaskExecutionException 并以值 255 退出。

有人找到解决这个问题的方法了吗?这确实减慢了我的工作流程。


只需添加多 dex 影子依赖:

testImplementation "org.robolectric:shadows-multidex:4.0.1"

如果您使用 Robolectric

testImplementation "org.robolectric:multidex:3.4.2"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Multidex 后 Robolectric 单元测试失败 的相关文章

  • Android第一次动画不流畅

    我正在尝试一个动画将 imageView 从屏幕底部滑动到屏幕中心 但是当我第一次执行此动画时 它不平滑 但当第二次执行动画时 它是正常且平滑的 我几乎尝试了所有方法 但无法解决我的问题 这是我的动画文件
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 在意图过滤器中使用多个操作时的默认值

    尝试理解 Android 中的意图和操作并查看文档 http developer android com guide topics intents intents filters html 但我一直看到的一件事是定义了多个操作的意图过滤器
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 在 Android 中,如何将字符串从 Activity 传递到 Service?

    任何人都可以告诉如何将字符串或整数从活动传递到服务 我试图传递一个整数 setpossition 4 但它不需要 启动时总是需要 0 Service 我不知道为什么我不能通过使用 Service 实例从 Activity 进行操作 publ
  • 由于 play-services-base-17.1.0.aar 转换错误,无法构建项目

    所以基本上我已经快一年没有打开我的 Android Studio 项目了 这次是打开和构建它的时候了 更新 Android Studio 和项目的所有插件后 我终于遇到了这个错误 Execution failed for task app

随机推荐

  • MYSQL - 从大表中的第二行选择数据

    我有一个外部第3方程序将数据库实时导出到mysql 我想显示数据以进行报告 所以 我无法更改结构 因为它是实时同步的 表结构是这样的 ID Date Transaction 12 2012 11 01 200 12 2012 11 02 2
  • Android sdk 中缺少 Cordova gradle 包装器

    我在 windows7 x64 上 安装了今天最新的稳定版本的 android sdk studio 通过 android studio 捆绑包 因为它现在显然是一起发货的 我已经正确配置了环境变量 如您在上面看到的 这是我发出以下命令时得
  • 在 Rails 服务器日志中查看 Resque 日志输出

    我在 Puma 服务器上有一个 Rails 4 应用程序 其中 Resque Resque Scheduler 正在运行后台作业 我想知道的是如何将两个 Resque 工作人员的日志输出合并到我的服务器日志中 或者 这是不可能的 我如何查看
  • 在本地 WiFi 网络上服务 Django 项目

    I used python manage runserver 0 0 0 0 8000 启动服务器 以便我可以从 wifi 网络上的其他计算机访问该项目 但是当我在另一台计算机上浏览到 internet ipaddress 8000 时 该
  • 适用于 iOS 的 Facebook SDK:未显示 FBSDKShareDialog

    我是 iOS 新手 我想分享一个使用 Facebook SDK for iOS 的链接 我的代码如下 IBAction func shareVoucherUsingFacebook sender UIButton print Faceboo
  • CompletableFuture 已完成,但有异常

    CompletableFuture completedFuture https docs oracle com javase 9 docs api java util concurrent CompletableFuture html co
  • 为什么这个 random() 分布看起来不对称?

    编辑 这是使用 Google Chrome 36 我正在摆弄 html5 画布 生成随机分布在立方体内的点并将其投影到 2D 画布上 令人惊讶的是 结果看起来一点也不对称 我怀疑 Javascript 的 Math random 让我失望了
  • 如何让log4j记录到文件并打印到控制台

    我可以将日志发送到控制台 但似乎无法将其发送到日志文件 这是我的properties file log4j rootLogger DEBUG LOG stdout log4j appender stdout org apache log4j
  • 在cmake中make install后进行后处理

    我正在尝试在 make install 末尾制作可执行文件的副本 我需要做类似的事情 cp bin prog bin prog1 我已将以下内容添加为 CMakelists txt 中的最后一行 install CODE execute p
  • 如何禁用默认视频播放器的画中画模式

    当用户尝试在我的应用程序中播放视频时 如何在 iPad 上的 iOS9 中使用 Swift 禁用画中画按钮 模式 默认 AVPlayerLayers 不会使用画中画 除非您使用AV画中画控制器 https developer apple c
  • 如何创建 DOM 构造函数的实例?

    当我尝试创建 DOM 的 HTMLElement 实例时 var oElement new HTMLElement 它抛出 类型错误 非法构造函数 为什么我们不能实例化 DOM 的构造函数 有办法做到吗 谢谢 要使用 Javascript
  • 自动缩进:smartindent 和 indentexpr

    当我编辑 Python 文件时 例如 def my func print Something lt CURSOR IS HERE 我想通过输入添加评论 该行会自动重新缩进到该行的开头 def my func print Something
  • createwindow(...)之后,如何给窗口赋予颜色?

    我创建了一个窗口 其句柄是handle parent 然后我创建了一个子窗口 如下所示 hwnd child CreateWindow child class name T WS CHILDWINDOW 0 0 0 0 hwnd paren
  • 使用 Rails 进行带宽管理?

    我想知道是否有人知道一种可以在 Rails 应用程序中以不依赖于 Web 服务器的方式管理带宽的方法 例如 每个帐户都有带宽限制 进出境交通是否会从每月津贴中扣除 一种选择是在 application rb 中添加 after filter
  • 如何在 IE8 中禁用 body.blur()?

    我正在开发一个在 IE8 中运行的企业 Web 应用程序 它出现blur 在主体上调用导致 IE 窗口被发送到后台 不幸的是 此代码位于由供应商控制的应用程序的一部分中 有什么可能的方法来预防blur 在不修改实际调用的代码的情况下在主体上
  • 在 Rails 控制器操作中渲染 html 时模板丢失错误

    我正在尝试使用 render html 从控制器操作中渲染原始 html class SomeController lt ApplicationController def raw html render html Some body te
  • Seaborn Jointplot 为每个类别添加颜色

    我想使用seaborn绘制2个变量的相关图jointplot 我尝试了很多不同的方法 但我无法根据类别为点添加颜色 这是我的代码 import numpy as np import seaborn as sns import matplot
  • 使用 EEPlus 读取 Excel 文件时,Excel 日期字段值与 C# dateTime 相差 1 天

    我在使用 EEPlus 库从 Excel xlsx 文件获取正确的日期字段值时遇到问题 特殊的问题是 在 excel 中我有例如1900 01 04 但在 C 中我得到 1900 01 03 我有一个想法 当我从 Excel 读取日期值时
  • puppeteer 无法在浏览器中加载 chrome 扩展

    这是我第一次使用 puppeteer 我想打开 google chrome 页面并导航到我已安装的 chrome 扩展 我尝试启用 chrome 扩展 但是当我在中运行脚本时headless false模式下浏览器会弹出 没有我的扩展程序
  • Multidex 后 Robolectric 单元测试失败

    因此 我最近将 robolectric 3 0 升级与我们的主线合并 这为我们的应用程序添加了 multidex 支持 不幸的是 这带来了不幸的副作用 导致我们的测试失败 无法运行 它们只会在第一次尝试安装 MultiDex 失败后停止 堆