OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 65 / 69
java
CHAPTER 65 / 69
읽기 약 2
FUNCTION

Mockito 단위 테스트


핵심 개념

Mockito로 의존성을 모의(Mock)하여 순수 단위 테스트를 작성한다. given-when-then 패턴, verify, ArgumentCaptor 활용법.

코드 분석
JAVA📋 코드 (39줄)
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
    @InjectMocks OrderService orderService;
    @Mock OrderRepository orderRepository;
    @Mock PaymentService paymentService;
    @Mock EmailService emailService;
    @Captor ArgumentCaptor<Order> orderCaptor;

    @Test
    @DisplayName("주문 생성 — 결제 성공 후 이메일 발송")
    void createOrder_Success() {
        // given
        User user = new User(1L, "test@test.com");
        CreateOrderDto dto = new CreateOrderDto(List.of(1L, 2L), 50000);
        when(paymentService.pay(50000)).thenReturn(true);
        when(orderRepository.save(any(Order.class)))
            .thenAnswer(inv -> inv.getArgument(0));

        // when
        OrderDto result = orderService.create(user, dto);

        // then
        assertThat(result).isNotNull();
        verify(orderRepository).save(orderCaptor.capture());
        Order savedOrder = orderCaptor.getValue();
        assertThat(savedOrder.getTotal()).isEqualTo(50000);
        verify(emailService, times(1))
            .sendOrderConfirmation(eq("test@test.com"), any());
    }

    @Test
    @DisplayName("결제 실패 시 주문 저장 안 됨")
    void createOrder_PaymentFail() {
        when(paymentService.pay(anyInt())).thenReturn(false);
        assertThatThrownBy(() -> orderService.create(user, dto))
            .isInstanceOf(PaymentFailException.class);
        verify(orderRepository, never()).save(any());
    }
}

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

이 Spring 'Mockito 단위 테스트' 코드에서
DI 관련 버그·순환 참조·트랜잭션 누수를
찾아서 수정해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

'Mockito 단위 테스트'를 Spring Boot 3.x로 구현한
실전 API 코드(컨트롤러+서비스+레포지토리+테스트)를 완성형으로 만들어줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

이 Spring 'Mockito 단위 테스트' 프로젝트의 빈 구조와
의존성 트리를 전체 분석하고
N+1 쿼리·순환 참조·성능 병목을 정리해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

Spring 'Mockito 단위 테스트' vs Quarkus·Micronaut·Ktor의
동일 기능 구현을 2026년 한국 채용 시장 기준으로
솔직히 비교해줘.

⭐ 이것만 기억하세요
Mockito 단위 테스트 이 3가지만 확실히 잡으세요
1.실제 DB와 외부 API에 의존하는 테스트는 느리고 불안정합니다
2.Mockito의 mock()으로 가짜 객체를 만들고, when().thenReturn()으로 동작을 정의해서 빠르고 격리된 단위 테스트를 작성합니다
3.다음 챕터에서 Docker로 Spring Boot 앱을 배포합니다


공유하기
진행도 65 / 69