我正在用 Cucumber 和 mockito_kotlin 编写 BDD 测试。验证函数如下:
@Then("there shouldn't be any coockie eaten.")
fun there_shouldnt_be_any_coockie_eaten() {
verify(mockCoockie, never()).eatGoodCookie()(any(), any())
}
Cookie接口:
interface ICookie {
val cookieSauce: Sauce?
fun eatGoodCookie(): ListenableFuture<GetCookieListResult>
fun eatBadCookie(): ListenableFuture<GetCookieListResult>
//...
}
我在测试课上的 mockCookie:
private val mockCookie = mock<ICookie> {
on { cookieSauce }.thenReturn(mock()) ------- Line 35
on { eatGoodCookie(any(), any()) }
.thenReturn(Futures.immediateFuture(GetCookieListResult().apply {
appList = emptyArray()
})).thenReturn(Futures.immediateFuture(GetCookieListResult().apply {
appList = arrayOf(theOnlyCookieCatalog)
}))
//...
}
但是我遇到了这些错误:
org.mockito.exceptions.misusing.UnfinishedStubbingException:在此处检测到未完成的存根:-> 在 com.nhaarman.mockito_kotlin.MockitoKt.whenever(Mockito.kt:253)
例如 thenReturn() 可能会丢失。
正确的存根示例:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(异常);
doThrow(exception).when(mock).someVoidMethod();
提示:
1. 缺少 thenReturn()
2. 您正在尝试存根不支持的最终方法
3:如果完成,您正在存根在 'thenReturn' 指令之前内部另一个模拟的行为
我不知道我反对哪个tule。有人遇到过类似的问题吗?
相关工具的版本为:
testImplementation 'org.mockito:mockito-core:3.2.4'
testImplementation 'com.nhaarman:mockito-kotlin:1.5.0'
testImplementation 'org.hamcrest:hamcrest-library:1.3'