Mockito WrongTypeOfReturnValue Iterable而不是List

时间:2017-01-06 12:37:05

标签: java mockito

我使用JpaRepository将集合保存到我的数据库。这是方法的声明:

<S extends T> List<S> save(Iterable<S> entities);

在我的测试中,我使用returnsFirstArg作为这样的答案:

doAnswer(returnsFirstArg()).when(userRepository)
        .save(anyListOf(User.class));

所以我想在不保存的情况下返回给定的集合。我无法返回null,因为我测试了以下代码:

return userRepository.save(users);

然后我应该对结果做出断言 模拟给了我以下错误:

  

org.mockito.exceptions.misusing.WrongTypeOfReturnValue:参数   类型'Iterable'无法返回,因为以下方法   应该返回类型'列表' - &gt; userRepositorty bean.save()

     

出现此错误的原因可能是:   1.通缉参数的位置不正确。   答案用于错误的互动。

     

有用参数的位置为0,可能的参数索引   对于这种方法是:       [0] Iterable

我该如何解决这个问题呢? Mockito 1.10.19

1 个答案:

答案 0 :(得分:2)

好吧,正如错误消息所示,第一个参数是Iterable,而不是List。遗憾的是,returnsFirstArg不会让你贬低论点,即使你实际上是在传递List

令人惊讶的是,如果你只是天真地用你自己的Answer实现这种行为,它就可以了:

doAnswer(i -> i.getArguments()[0])
   .when(userRepository)
   .save(anyListOf(String.class));

它不优雅,但它的魅力就像一个魅力。