是否可以在没有开课的情况下使用Mockito和Kotlin?

时间:2016-04-10 23:23:13

标签: unit-testing mocking mockito kotlin

正如我们可能知道的那样,默认情况下,Kotlin类一旦定义,它就是最终的,除非它被明确声明为open

当我们想要使用Mockito进行模拟时,这会发出挑战。我们需要明确地将其声明为open。有没有办法可以避免将它声明为open而能够将其模拟为我们的测试?

2 个答案:

答案 0 :(得分:8)

运行espresso测试时,MockMaker插件似乎不起作用。因此,您可以使用Kotlin的all-open pugin代替。

在build.gradle中添加插件:

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: "kotlin-allopen"

指定使类打开的注释:

allOpen {
    annotation("com.my.MyMockable")
}

创建可用于注释类的注释:

@Target(AnnotationTarget.CLASS)
annotation class MyMockable

然后,为了让你的类及其公共方法Mockable(open),用你的注释注释它:

@MyMockable

答案 1 :(得分:7)

Mockito2现在也可以模拟最终的类。

但是,此功能为选择加入,因此您需要手动启用它 为此,您需要定义包含行/mockito-extensions/org.mockito.plugins.MockMaker

的文件mock-maker-inline

见例如 http://hadihariri.com/2016/10/04/Mocking-Kotlin-With-Mockito/或  https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2#unmockable
快速介绍

在旁注上,目前为doesn't work for android