我开始使用 Kotlin 学习 Mockito,我对
eq()
API 有点困惑。
我注意到,无论我是否使用
eq()
,以下测试仍然通过:
@Test
fun init_shouldShowLoading() {
viewModel.initGame()
verify(loadingObserver).onChanged(eq(true))
}
使用 eq() 和不使用它有什么区别?我什么时候应该使用 eq()?非常感谢!
如果您只使用
eq
匹配器,那没关系,但是如果您需要使用不同的匹配器来匹配参数,则需要为所有参数提供匹配器。
这有效:
verify(someMock).someMethod(eq("param1"), eq("param2"))
这也是:
verify(someMock).someMethod(eq("param1"), anyString())
但这不是:
verify(someMock).someMethod("param1", anyString())
这在关于参数匹配器的Mockito 文档中明确涵盖了:
参数匹配器警告: 如果您使用参数匹配器,则所有参数都必须由匹配器提供。
以下示例显示了验证,但同样适用于存根:
verify(mock).someMethod(anyInt(), anyString(), eq("third argument")); //above is correct - eq() is also an argument matcher verify(mock).someMethod(anyInt(), anyString(), "third argument"); //above is incorrect - exception will be thrown because third argument is given without an argument matcher.