Мне нужно провести модульное тестирование функции doClassAction
, и внутри нее вызывается функция doStoreAction
для объекта store
.
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)
Есть ли способ вызвать метод, а также посмеяться над ответом обратного вызова на значение, которое я установил в тестах, но все же оно проходит исходный поток кода?