android - java.lang.IllegalArgumentException : On Android P, 类注入(inject)只能应用于BaseDexClassLoader

标签 android unit-testing android-studio kotlin android-9.0-pie

我们的应用程序正在开发过程中,我们遵循 MVP 方法,通过在 Presenter 上编写单元测试用例来提供更好的测试覆盖率。

在 Android P 之前,我们的测试用例在执行时没有任何问题,但现在在 Android P 发布之后,当我们尝试在 Pixel 2 (Android P) 上运行测试用例时,我们的测试用例在以下代码行中失败 -

private lateinit var mPackageInfo: PackageInfo
mPackageInfo = Mockito.mock(PackageInfo::class.java)

带有以下错误消息 -

org.mockito.exceptions.base.MockitoException: Mockito cannot mock this class: class android.content.pm.PackageInfo.

Mockito can only mock non-private & non-final classes.

Underlying exception : java.lang.IllegalArgumentException: On Android P, a class injection can only be applied to BaseDexClassLoader: net.bytebuddy.dynamic.loading.MultipleParentClassLoader@a3838ec


我该如何解决这个问题?

最佳答案

引用这里https://github.com/mockito/mockito/issues/1376

尝试使用版本2.18.3

testImplementation 'org.mockito:mockito-core:2.18.3'
androidTestImplementation 'org.mockito:mockito-android:2.18.3'

关于android - java.lang.IllegalArgumentException : On Android P, 类注入(inject)只能应用于BaseDexClassLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51890975/

相关文章:

java - 滚动 ExpandableListView 后计数器的值发生变化

java - 模拟器无法播放声音

Android Studio 1.2.1.1布局预览问题

java - 设备进入休眠状态时 GPS 无法接收位置更新(黑屏)

android - 如何将 Java.Util.Date 转换为 System.DateTime

c++ - 是否可以使用 gtest 或 gmock 模拟被调用函数的返回值?

c++ - 使用 GoogleTest 和 Bullseye 生成测试报告

android - 在 Android Studio 中加载项目时出错 : cannot load modules

android - 构建 GoogleSignInOptions 时的 firebase serverClientId

c# - 使用作为公共(public)依赖项的私有(private)静态字段对静态类进行单元测试