我使用 JpaRepository 将集合保存到我的数据库。这是方法的声明:
<S extends T> List<S> save(Iterable<S> entities);
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我使用returnsFirstArg这样的答案:
doAnswer(returnsFirstArg()).when(userRepository)
.save(anyListOf(User.class));
Run Code Online (Sandbox Code Playgroud)
所以我想不保存就返回给定的集合。我无法返回,null因为我测试了以下代码:
return userRepository.save(users);
Run Code Online (Sandbox Code Playgroud)
然后我应该对结果做出断言。
模拟给了我以下错误:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:无法返回类型为“Iterable”的参数,因为以下方法应返回类型“列表”-> userRepositorty bean.save()
此错误的原因可能是: 1. 想要的参数位置不正确。2. 答案用于错误的交互。
所需参数的位置为 0,此方法的可能参数索引为: [0] Iterable
我该如何解决这个问题?
Mockito 1.10.19
好吧,正如错误消息所暗示的那样,第一个参数是 an Iterable,而不是 a List。returnsFirstArg不幸的是,即使您实际上正在传递List.
令人惊讶的是,如果你只是天真地用Answer自己的一个来实现这个行为,它就可以正常工作:
doAnswer(i -> i.getArguments()[0])
.when(userRepository)
.save(anyListOf(String.class));
Run Code Online (Sandbox Code Playgroud)
它并不优雅,但它就像一种魅力。