PHpullh
학습 라이브러리/Java/BDD 스타일 테스트 (given/when/then)

JAVA · 테스트

BDD 스타일 테스트 (given/when/then)

BDD 스타일로 테스트를 작성하여 가독성과 의도를 명확히 합니다.

테스트중급BDDgiven-when-thenBDDMockito행위검증

핵심 설명

BDD 스타일로 테스트를 작성하여 가독성과 의도를 명확히 합니다.

Java code

// BDD with Mockito (의사코드)
// import static org.mockito.BDDMockito.*;

// class OrderServiceBDDTest {
//     OrderRepository repo = mock(OrderRepository.class);
//     PaymentGateway payment = mock(PaymentGateway.class);
//     OrderService service = new OrderService(repo, payment);
//
//     @Test
//     @DisplayName("유효한 주문이면 결제 후 저장한다")
//     void shouldProcessValidOrder() {
//         // Given (준비)
//         Order order = new Order("ORD-1", "노트북", 1500000);
//         given(payment.charge(anyLong())).willReturn(true);
//         given(repo.save(any(Order.class))).willReturn(order);
//
//         // When (실행)
//         Order result = service.placeOrder(order);
//
//         // Then (검증)
//         then(payment).should().charge(1500000L);
//         then(repo).should().save(order);
//         assertThat(result.getId()).isEqualTo("ORD-1");
//     }
//
//     @Test
//     @DisplayName("결제 실패 시 주문을 저장하지 않는다")
//     void shouldNotSaveWhenPaymentFails() {
//         // Given
//         given(payment.charge(anyLong())).willReturn(false);
//
//         // When & Then
//         assertThrows(PaymentException.class,
//             () -> service.placeOrder(new Order("ORD-2", "키보드", 80000)));
//         then(repo).should(never()).save(any());
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("BDD Mockito: given() -> when(실행) -> then().should()");
        System.out.println("일반 Mockito: when() -> 실행 -> verify()");
    }
}

학습 팁

BDD 스타일(given/when/then)은 비개발자도 테스트 의도를 이해할 수 있습니다. BDDMockito를 사용하면 코드와 용어가 일치합니다.

주의할 점

given()when()을 혼용하면 가독성이 떨어집니다. 프로젝트에서 하나의 스타일을 통일하세요.

자주 묻는 질문

BDD 스타일 테스트 (given/when/then)란 무엇인가요?

BDD 스타일로 테스트를 작성하여 가독성과 의도를 명확히 합니다.

BDD 스타일 테스트 (given/when/then) 학습 시 주의할 점은 무엇인가요?

given() 과 when() 을 혼용하면 가독성이 떨어집니다. 프로젝트에서 하나의 스타일을 통일하세요.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.