PHpullh

JAVA · 테스트

Mockito 심화

Mockito로 의존성을 모킹하고 행위를 검증하는 고급 기법입니다.

테스트중급Mockitomockverifywhen

핵심 설명

Mockito로 의존성을 모킹하고 행위를 검증하는 고급 기법입니다.

Java code

// Mockito 의존성: org.mockito:mockito-core:5.8+

// import static org.mockito.Mockito.*;
// import static org.mockito.ArgumentMatchers.*;

// Mockito 패턴 (의사코드)
// class UserServiceTest {
//     UserRepository repo = mock(UserRepository.class);
//     EmailService email = mock(EmailService.class);
//     UserService service = new UserService(repo, email);
//
//     @Test
//     void createUser_success() {
//         // Given: 스텁 설정
//         when(repo.save(any(User.class)))
//             .thenReturn(new User("1", "홍길동"));
//         when(repo.existsByEmail("hong@test.com"))
//             .thenReturn(false);
//
//         // When: 실행
//         User user = service.createUser("홍길동", "hong@test.com");
//
//         // Then: 검증
//         assertNotNull(user);
//         verify(repo).save(any(User.class));
//         verify(email).sendWelcome(eq("hong@test.com"), anyString());
//         verify(repo, never()).deleteById(anyString());
//         verifyNoMoreInteractions(email);
//     }
//
//     @Test
//     void createUser_duplicateEmail() {
//         when(repo.existsByEmail("dup@test.com")).thenReturn(true);
//
//         assertThrows(DuplicateException.class,
//             () -> service.createUser("이름", "dup@test.com"));
//
//         verify(repo, never()).save(any());
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("Mockito: mock() -> when().thenReturn() -> verify()");
        System.out.println("ArgumentMatchers: any(), eq(), anyString(), argThat()");
    }
}

학습 팁

verify()로 메서드 호출 횟수(times(), never(), atLeast())를 검증하세요. 행위 검증이 Mockito의 핵심입니다.

주의할 점

when(mock.method())에서 any()와 실제 값을 혼용하면 에러입니다. 모든 인자를 matcher로 통일하거나 eq()로 감싸세요.

자주 묻는 질문

Mockito 심화란 무엇인가요?

Mockito로 의존성을 모킹하고 행위를 검증하는 고급 기법입니다.

Mockito 심화 학습 시 주의할 점은 무엇인가요?

when(mock.method()) 에서 any() 와 실제 값을 혼용하면 에러입니다. 모든 인자를 matcher로 통일하거나 eq() 로 감싸세요.