如何在Mockito中创建自定义数据类型列表的模拟?

Sou*_*abh 4 java unit-testing mockito

我有一个具有以下定义的类User:

class User {

  Integer id;
  String name;
  String addr;

  //getters and setters

}
Run Code Online (Sandbox Code Playgroud)

现在,在测试函数时,我需要返回一个存根的模拟用户列表,例如:

Mockito.when(userService.getListOfUsers()).thenReturn(mockList);
Run Code Online (Sandbox Code Playgroud)

现在可以按如下方式创建此mockList:

List mockList = Mockito.mock(ArrayList.class);
Run Code Online (Sandbox Code Playgroud)

但是这个mockList可以是任何东西的列表.我无法确保其类型.有没有办法创建列表:

List<User> mockListForUser = Mockito.mock(?);
Run Code Online (Sandbox Code Playgroud)

Dun*_*nes 12

您可能希望使用模拟对象填充普通列表.例如

List<User> mockList = new ArrayList<>();

User mockUser1 = Mockito.mock(User.class);
// ...    

mockList.add(mockUser1);
// etc.
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下,Mockito会为返回集合的任何模拟方法返回一个空集合.因此,如果您只想返回一个空列表,Mockito已经为您做了.

  • @Sourabh想象一下要制作意大利面的考试。指导老师会给您一些食材,并根据最终菜的口味来判断您。他不在乎您按什么顺序切碎配料,但他在乎您生产的东西。与模拟类似-仅测试“足够”以确保结果正确。关心列表的使用方式就像关心斩波。 (2认同)

Jea*_*art 6

@Mock在测试中使用注释,因为Mockito可以使用类型反射:

@Mock
private ArrayList<User> mockArrayList;
Run Code Online (Sandbox Code Playgroud)

  • 粗略地说,除了它更性感,而且你不处理这里的问题类型:你让 Mockito 为你做。 (2认同)
  • @Duncan有时甚至可能很热;-) (2认同)