单元测试中eq()方法用法及Mockito参数匹配器报错问题解析
Mockito中eq()匹配器的作用及代码差异解析
错误原因与代码差异
你第一段测试代码里的givenMock()方法抛出错误,核心原因是违反了Mockito的参数匹配规则:当方法调用中使用任意一个参数匹配器(比如any())时,所有参数必须全部使用匹配器,不能混合真实对象和匹配器。
两段代码的具体差异:
- 第一段代码:
bookRepository.updateBook(bookId, any()),第一个参数是真实的bookId对象,第二个是any()匹配器,属于混合使用,触发规则校验错误。 - 第二段代码:
bookRepository.updateBook(eq(bookId), any()),两个参数都使用了匹配器(eq(bookId)和any()),符合Mockito的规则,所以测试正常运行。
eq()匹配器的作用
eq()是Mockito提供的基础参数匹配器,核心功能是匹配与指定值相等的参数——它会调用参数对象的equals()方法来完成相等性校验。
当你需要在使用其他匹配器(比如any()匹配任意值)的场景下,指定某个参数必须等于特定值时,就需要用eq()把真实值包装成匹配器,这样既能满足“全参数用匹配器”的规则,又能精准匹配你需要的参数值。
比如在你的场景中,eq(bookId)表示:只有当updateBook方法的第一个参数等于你预设的bookId时,才返回你定义的expectedBook,第二个参数可以是任意值(由any()匹配)。
内容的提问来源于stack exchange,提问作者Palak Kharbanda
相关产品推荐
相关产品推荐

