【发布时间】:2018-05-09 15:14:40
【问题描述】:
我需要对函数doClassAction 进行单元测试,并在其中调用对象store 上的函数doStoreAction。
这个doStoreAction 接受两个参数,一个整数和一个函数,如下例所示
class MyStore() {
fun doStoreAction(num: Int, callback: (text: String) -> Unit) {
// It does something
// ...
// and when it's done it calls the callback
return callback("some text")
}
}
class MyClass(private val store: MyStore,
private val objectX: MyObject) {
fun doClassAction(num: Int) {
store.doStoreAction(num) { callbackResult ->
// Action (potentially asynchronous)
// that will happen after obtaining the value via the callback
objectX.doObjectAction(callbackResult)
}
}
}
我正在使用Mockito,到目前为止我的测试有以下几行
@Test
fun doClassActionTest() {
val mockStore = mock(MyStore::class.java)
val mockObject = mock(MyObject::class.java)
val class = MyClass(mockStore, mockObject)
class.doClassAction(42)
}
但它没有编译,因为对方法的调用没有指定回调...我不想覆盖它,因为我希望测试使用原始的并验证里面的东西被正确调用,比如:
when(objectX.doObjectAction(anyString())).doNothing()
verify(objectX, times(1)).doObjectAction(callbackResult)
有没有办法调用该方法并模拟我在测试中设置的值的回调响应,但仍然让它通过原始代码流?
【问题讨论】:
标签: android unit-testing lambda kotlin mockito