如何模拟调用集合方法且此集合没有 setter 的方法?
how to mock method which invoke collection method and this collection has not setter?
我关注class:
public class UsersHolder {
private Set<User> users = new HashSet<>();
public void addUser(User user) {
users.add(user);
}
...
}
用户没有setter方法
有没有办法测试addUser
方法?
有办法。
@RunWith(MockitoJUnitRunner.class)
public class UsersHolderTest {
@InjectMocks private UsersHolder usersHolder;
@Mock private Set<User> users;
@Test
public void addUser_shouldAddUser() {
// given
User user = new User();
// when
usersHolder.addUser(user);
// then
Mockito.verify(usersHolder).add(user);
}
}
也就是说我不会测试这么简单的逻辑。此外,在这种情况下,集合变成了应该来自外部的 class 依赖项(通常集合被视为在 class 内部管理的数据持有者)。
我关注class:
public class UsersHolder {
private Set<User> users = new HashSet<>();
public void addUser(User user) {
users.add(user);
}
...
}
用户没有setter方法
有没有办法测试addUser
方法?
有办法。
@RunWith(MockitoJUnitRunner.class)
public class UsersHolderTest {
@InjectMocks private UsersHolder usersHolder;
@Mock private Set<User> users;
@Test
public void addUser_shouldAddUser() {
// given
User user = new User();
// when
usersHolder.addUser(user);
// then
Mockito.verify(usersHolder).add(user);
}
}
也就是说我不会测试这么简单的逻辑。此外,在这种情况下,集合变成了应该来自外部的 class 依赖项(通常集合被视为在 class 内部管理的数据持有者)。