我在Kotlin写了Android Clean Architecture project个3个模块:
3个模块都有使用junit 编写的单元测试。但是对于Kotlin,默认情况下每个班级都是最终的。我很快就遇到了问题:如何用mockito模拟最后一堂课
现在可以使用Mockito 2
可以通过mockito扩展机制创建包含单行的文件/mockito-extensions/org.mockito.plugins.MockMaker
:
mock-maker-inline
此解决方案适用于数据模块(Android库)和 演示模块(Android应用程序)但不适用于我的 domaine模块(Java Library)。
我知道这个问题已被提出(How to mock a final class with mockito,Mock objects calling final classes static methods with Mockito),但我找不到我正在寻找的答案。
答案 0 :(得分:16)
默认情况下,您可以使用内联模拟方法,方法是将Gradle依赖项更改为正常的Mockito依赖项:
compile "org.mockito:mockito-core:$mockito_version"
......以下内容:
compile "org.mockito:mockito-inline:$mockito_version"
通过这种方式,您不必依赖于使用“资源文件夹中的文件”方法激活内联模拟,我发现这种方法有时会出现片状。
答案 1 :(得分:0)
Mockito的MockMaker只能用于单元测试(在JVM上运行)。对于那些在仪器测试(androidTest)中模拟Kotlin类有问题的人,请尝试使用DexOpener库。它使Kotlin类,属性和方法open
允许它们进行模拟。