1

我正在用 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'

4

0 回答 0