使用 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"));
}
}