使用 ArgumentCaptor 验证参数
要验证在 mock 上调用的方法的参数,请使用 ArgumentCaptor
类。这将允许你将参数提取到测试方法中并对它们执行断言。
此示例测试一个更新具有给定 ID 的用户名的方法。该方法加载用户,使用给定值更新 name
属性并在之后保存。测试想要验证传递给 save
方法的参数是一个具有正确 ID 和名称的 User
对象。
// This is mocked in the test
interface UserDao {
void save(User user);
}
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@Mock
UserDao userDao;
@Test
public void testSetNameForUser() {
UserService serviceUnderTest = new UserService(userDao);
serviceUnderTest.setNameForUser(1L, "John");
ArgumentCaptor<User> userArgumentCaptor = ArgumentCaptor.forClass(User.class);
verify(userDao).save(userArgumentCaptor.capture());
User savedUser = userArgumentCaptor.getValue();
assertTrue(savedUser.getId() == 1);
assertTrue(savedUser.getName().equals("John"));
}
}