繁体   English   中英

运行SDK时,Mockito + Espresso + Dagger2 => ClassNotFoundException低于目标SDK

Mockito + Espresso + Dagger2 => ClassNotFoundException when running SDK is lower than target SDK

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

当我尝试模拟一个引用SDK> = 26中的类并在运行SDK 24的设备中执行测试的类时,我遇到了这个限制。我创建了一个测试应用程序以更好地理解问题。

open class RandomStuff{

    @RequiresApi(Build.VERSION_CODES.O)
    fun createDefaultNotificationChannel(): NotificationChannel {
        return NotificationChannel("test", "test", NotificationManager.IMPORTANCE_DEFAULT)
    }

    fun testString(): String = "This is a test string"
}

请注意,RandomStuff类引用NotificationChannel类,仅在SDK> = 26中找到。

通过Dagger提供的测试对象如下:

@Module
class AppTestModule : AppModule() {

    @Provides
    override fun provideRandomStuff(): RandomStuff {

        return mock(RandomStuff::class.java)
    }
}

mock将因此异常而失败: java.lang.IllegalArgumentException:无法在provideRandomStuff(AppTestModule.kt)中创建类型,最终由ByteBuddy(Mockito使用的组件)抛出的ClassNotFoundException引起。 通过在我的提供方法中添加一些检查,我能够解决这个问题:

@Module
class AppTestModule : AppModule() {

    @Provides
    override fun provideRandomStuff(): RandomStuff? {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            return mock(RandomStuff::class.java)
        } else { 
            return null
        }
    }
}

这个临时解决方案非常具有侵入性,因为现在,生产代码必须考虑到RandomStuff可能为null。 我称之为限制,因为Mockito一直被提升为单元测试框架,Dagger + Espresso + Mockito似乎不是完全支持的组合。 对于这个问题,是否有更有创意的解决方案?

问题暂未有回复.您可以查看右边的相关问题.
1 应该编译sdk低于目标sdk

关于SO的压倒性建议是编译SDK通常应该与目标SDK匹配。 https://stackoverflow.com/a/27629181/360211 同样,建议将此[compileSdk]与目标sdk版本匹配。 https://stackoverflow.com/ ...

2015-08-30 11:05:30 1 1902   android
4 注射Dagger2进行浓咖啡测试

我想注入我的Espresso测试中由dagger创建的组件。 组件应该相同,因此不必覆盖匕首中的任何内容。 我有以下课程: 由于无法将AccountRepositoryTest添加到我的主要DaggerComponent类中,因此我在androidTests文件夹中创建了另一 ...

9 目标SDK较低的APK无法在目标SDK较高的设备中安装

我正在尝试将本机(预安装)Android 2.3 APK安装到Android 7.0设备中。 从理论上讲,目标SDK低于我要安装该应用程序的设备的SDK,并且我应该能够很好地安装它(除非存在兼容性问题)。 它确实显示了“安装”屏幕,还显示了所需的电话权限。 该应用程序只是一个简单的音乐 ...

10 Dagger2 + Mockito:如何对这种情况进行单元测试?

我正在一个团队项目中,它具有非常耦合的代码。 我正在尝试增加单元测试的覆盖范围,并且遇到了以下情况: 我想对methodA()进行单元测试,但是我不知道是否有可能在不通过构造函数将DBAcessor对象传递给Bar()类的情况下进行测试。 Bar应该是在整个项目中广泛使用的POJO模 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM