模拟单元测试和 UI 测试的最终类
Posted
技术标签:
【中文标题】模拟单元测试和 UI 测试的最终类【英文标题】:mock final classes for both unit and UI tests 【发布时间】:2019-06-06 22:00:02 【问题描述】:我正在尝试为我的 android 应用程序编写单元和 espresso UI 测试,使用 kotlin 构建。因为在 kotlin 中,每个类默认都是 final 的,所以为了模拟 final 类,我使用了支持 mocking final 类的 mockInline 库。 因为我必须同时编写单元测试和 UI 测试。我通过以下方式添加了库
testImplementation 'org.mockito:mockito-inline:2.13.0'
androidTestImplementation 'org.mockito:mockito-inline:2.13.0'
但是在运行 UI 测试时它正在抛出
More than one file was found with OS independent path 'mockito-extensions/org.mockito.plugins.MockMaker'
有没有办法使用 mockInline 库来
【问题讨论】:
我不会使用带有插件的 mocktio 来测试 Kotlin,而是使用为 Kotlin 编写的模拟框架,例如 mockk.io 您尝试过使用 PowerMockito 吗? 谢谢,但我仍在寻找是否有一种方法可以将 mockito-Inline 库用于两个测试。当然,PowerMickito 和 mockk.io 是最后的选择。 【参考方案1】:我们无法使用官方问题跟踪器here 中提到的 mockito 内联插件来模拟 UI 测试(Android 测试)的最终类
背后的原因是
“目前在 Android 上没有真正的可能使这项工作 时刻,因为它缺少我们在上面的检测 API 操作。 Android VM 不是标准 VM,仅实现了一个 Java 规范的子集。只要谷歌不选择 扩展它的JVM,我怕这个功能不行。”
如上所述here
模拟 android 测试的最终类
我们可以使用 DexOpener 库来模拟 Android 中的最终类。
我们也可以使用Kotlin Open Plugin,它可以让所有最终类在没有明确的 open 关键字的情况下打开。
【讨论】:
以上是关于模拟单元测试和 UI 测试的最终类的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 grails 在单元测试中模拟 springSecurityService