我有一个用 Kotlin 编写的 Android 清洁架构项目,其中包含 3 个模块:
- 数据(安卓库)
- domaine (Java Library)
- 演示文稿(安卓应用程序)
这 3 个模块每个模块都有使用 junit 编写的单元测试。但是使用 Kotlin 默认情况下,每个类都是最终的。我很快就遇到了问题:如何用模拟来模拟最后一堂课
现在可以通过Mockito 2
这可以通过 mockito 扩展机制来完成,方法是创建包含单行的文件/mockito-extensions/org.mockito.plugins.MockMaker
:
mock-maker-inline
该解决方案在数据模块(Android库)和 演示模块(安卓应用程序),但不适用于我的 domaine module (Java Library)。
我知道这个问题已经被问过了(如何使用 mockito 模拟最终类,使用 Mockito 模拟对象调用最终类静态方法),但我没有找到我正在寻找的答案。
默认情况下,您可以使用内联模拟方法,方法是将 Gradle 依赖项从普通的 Mockito 依赖项更改为:
compile "org.mockito:mockito-core:$mockito_version"
。到以下内容:
compile "org.mockito:mockito-inline:$mockito_version"
这样,您就不必依赖使用"资源文件夹中的文件"方法激活内联模拟,我发现这种方法有时是片状的。
Mockito的MockMaker只能用于单元测试(在JVM上运行)。对于那些在仪器测试(androidTest)中模拟Kotlin类时遇到问题的人,请尝试使用DexOpener库。它使 Kotlin 类、属性和方法open
,这允许它们的模拟。