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