如何仅为androidTest覆写expect/actual typealias实现?
可行方案有两种,按需选择即可
方案1:调整源码集配置实现androidTest单独覆写actual实现(保留expect/actual方案)
完全不需要维护额外构建类型,也不会有代码重复问题,操作步骤如下:
- 删掉原有
build.gradle中新增的platformMock构建类型配置,将testBuildType改回默认的debug即可 - 新建
src/prod/java目录,把原来debug、release目录下完全相同的Platform.kt(调用真实平台API的actual实现)移到这个目录下,原来debug、release、platformMock目录下的Platform.kt都可以删除 - 在
build.gradle中添加源码集配置,让正式构建复用同一份实现:
android { // 原有其他配置不变 sourceSets { debug { java.srcDirs += "src/prod/java" } release { java.srcDirs += "src/prod/java" } } }
main源码集下仅保留expect声明即可- 在
androidTest源码集的对应包路径下新建Platform.kt,写入你需要的mock版本的actual实现
运行插桩测试时会自动加载androidTest下的实现,正式构建时加载prod下的实现,完全不需要手动切换构建类型。
方案2:直接使用MockK框架,无需修改原有代码结构
如果只是要解决mock final类的问题,直接换用Kotlin原生测试框架MockK即可,它天生支持mock Android final类,没有Mockito的局限性,连expect/actual的封装都不需要,直接在测试代码中调用mockk<你要mock的硬件API类>()即可完成mock,不需要改动任何生产代码结构。
内容的提问来源于stack exchange,提问作者nunojpg
相关产品推荐
相关产品推荐

