[java] Mockito를 사용하여 Mock 객체가 특정 메소드를 호출하지 않도록 하는 방법은?

아래 예제에서는 UserService라는 클래스의 updateUser 메소드를 테스트하고 있습니다. 이 메소드 내에서 emailService라는 Mock 객체의 sendEmail 메소드가 호출되는지 확인하지 않도록 하고 싶습니다.

import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;

public class UserServiceTest {

    @Mock
    private EmailService emailService;

    @Test
    public void testUpdateUser() {
        UserService userService = new UserService(emailService);
        User user = new User("john", "john@example.com");

        // 특정 메소드가 호출되지 않는지 확인
        Mockito.verify(emailService, Mockito.never()).sendEmail(Mockito.anyString(), Mockito.anyString());

        userService.updateUser(user);

        // 특정 메소드가 호출되지 않았는지 확인
        Mockito.verify(emailService, Mockito.never()).sendEmail(Mockito.anyString(), Mockito.anyString());
    }
}

위의 예제에서는 verify 메소드의 첫 번째 매개변수로 Mock 객체를 전달하고, 두 번째 매개변수로는 확인하고 싶은 메소드를 호출하고 있는지를 지정합니다. never 매처를 사용하여 해당 메소드가 호출되지 않도록 설정합니다.

위 예제에서는 updateUser 메소드가 실행되기 전과 후에 sendEmail 메소드가 호출되지 않는지 확인하고 있습니다.

Mockito는 Mock 객체의 메소드 호출을 감지하고 확인하는 기능을 제공하여 테스트 코드를 작성할 때 유용하게 사용할 수 있습니다.

더 자세한 내용은 Mockito의 공식 문서를 참조하시기 바랍니다. Mockito 공식 문서