如何在Android项目的Java模块上使用Mockito 2模拟最终类?

时间:2017-04-09 11:40:53

标签: java android junit mockito kotlin

我在Kotlin写了Android Clean Architecture project个3个模块:

  • 数据(Android库)
  • domaine(Java Library)
  • 演示文稿(Android应用程序)

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 mockitoMock objects calling final classes static methods with Mockito),但我找不到我正在寻找的答案。

2 个答案:

答案 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允许它们进行模拟。