Mockito WrongTypeOfReturnValue Iterable 而不是 List

Fee*_*eco 3 java mockito

我使用 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

Mur*_*nik 5

好吧,正如错误消息所暗示的那样,第一个参数是 an Iterable,而不是 a List。returnsFirstArg不幸的是,即使您实际上正在传递List.

令人惊讶的是,如果你只是天真地用Answer自己的一个来实现这个行为,它就可以正常工作:

doAnswer(i -> i.getArguments()[0])
   .when(userRepository)
   .save(anyListOf(String.class));
Run Code Online (Sandbox Code Playgroud)

它并不优雅,但它就像一种魅力。