Mockito嘲笑像间谍:Kotlin
我正在研究一个kotlin jar,我试图模拟一个函数的输入
class MyService fun serviceFunction(input: ClassFromAnotherLibrary): Output { val foo = input.memberFunction()
只是碰巧, memberFunction
已经通过包级扩展函数被添加到我的包中的那个类
fun ClassFromAnotherLibrary.memberFunction() : Foo { val mapper = jacksonObjectMapper() return mapper.readValue(this.serializedFoo, Foo::class.java) }
现在我想写一个serviceFunction
的测试,但我想嘲笑memberFunction
调用(我有单独的测试)。
所以在我的Mockito JUnit测试中,我做了以下
val service = Service() val mockClassFromAnotherLibrary = mock<ClassFromAnotherLibrary>() val mockFoo = mock<Foo>() whenever(mockClassFromAnotherLibrary.memberFunction()) .thenReturn(mockFoo) service.serviceFunction(mockClassFromAnotherLibrary)
我期望memberFunction
的实际实现永远不会被调用,而且我的模拟会拦截任何尝试调用它,而是返回我的mockFoo
。
实际上 , whenever
设置模拟出调用底层函数的方法时,当mapper
尝试读取serializedFoo
(当然是null)时,会导致NullPointerException
。
我的问题是: 为什么地球上真正的memberFunction
被执行? 我是Mockito和Kotlin的新手,但过去曾经使用Jasmine(用于JS)和Spock(用于Groovy / Java)测试,并且在这两个框架中嘲笑对象将永远不会实际执行任何嘲讽函数我知道)。
我已经能够解决类似于这个过去的问题,通过使我从模拟的ClassFromAnotherLibrary
有一个interface
,我嘲笑,而是
- 感觉哈克,和
- 在这种情况下不是一个选项(这不是我的课程编辑,它来自另一个库)
作为参考,这些是我的项目正在使用的相关的gradle依赖关系:
compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.8.9" compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.9" compile "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.9" testCompile 'junit:junit:4.12' testCompile "org.jetbrains.kotlin:kotlin-test:1.1.4-3" testCompile "org.jetbrains.kotlin:kotlin-test-junit:1.1.4-3" testCompile "com.nhaarman:mockito-kotlin:1.3.0" testCompile "org.mockito:mockito-inline:2.8.47"
我也在我的test/resources
文件夹中建立了一个MockMaker
文件来启用mock-maker-inline
,但是我不完全明白它可能完成什么(在这里看到一个提示)
感谢任何Kotlin / Mockito
扩展函数不过是一个常规的Java静态方法,据我所知,Mockito不能嘲笑静态方法。
- Android + Kotlin中的实验JUnit支持不起作用
- 测试两个目录树的相等性
- 如何管理Kotlin中的unit testing资源,如启动/停止数据库连接或嵌入式弹性搜索服务器?
- 如何编译使用hamcrest的Kotlin单元测试代码是'
- 我怎样才能让我的JUnit测试在我的Kotlin + Gradle项目中编译和运行?
- Android w / Kotlin纯java-Junit的NoClassDefFoundError解决方法不起作用
- 我如何使用Kotlin运行单个Android测试?
- 释放kotlin中的变量
- 如何在Java / Kotlin中包含Annotation Processor生成的代码来测试类路径