正如我们可能知道的那样,默认情况下,Kotlin类一旦定义,它就是最终的,除非它被明确声明为open
。
当我们想要使用Mockito进行模拟时,这会发出挑战。我们需要明确地将其声明为open
。有没有办法可以避免将它声明为open
而能够将其模拟为我们的测试?
答案 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