inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업클럽 백엔드 스터디 2기] 4주차 발자국

spacebar
0

4주차 학습내용

Practical Testing : 실용적인 테스트 가이드

강의를 학습하며 작성한 내용입니다.

MOCK을 마주하는 자세

Mockito로 Stubbing하기

테스트에 불필요한 과정을 줄이기 위해 mock을 사용해서 테스트를 한다.

메일전송같이 긴 작업 (트랜잭션에는 참여하지 않아도 되는)에는 @Transactional을 걸지 않는 게 좋다.

Test Double

순수 Mockito로 검증해보기

더 나은 테스트를 작성하기 위한 구체적 조언

테스트 환경의 독립성을 보장하자

@DisplayName("재고와 관련된 상품이 포함되어 있는 주문번호 리스트를 받아 주문을 생성한다.")
@Test
void createOrderWithStock() {
    // given
    Stock stock1 = Stock.create("001", 2);
    Stock stock2 = Stock.create("002", 2);
    stock1.deductQuantity(3);
    ...
    
    //when //then
    assertThatThrownBy(() -> orderService.createOrder(request, registeredDateTime))
            .isInstanceOf(IllegalArgumentException.class)
            .hasMessage("재고가 부족한 상품이 있습니다.");
}

재고가 2개인데 3개를 차감하려고 하면 차감할 수량이 없다고 테스트에 오류가 발생한다. 테스트하고자 하는 행위는 createOrder인데 재고 차감이라는 다른 행위를 끌어다쓰면서 두 가지 케이스가 혼합이 되어있기 때문에 주문 생성 자체에 대한 테스트 실패가 아니라 given절을 생성하다가 테스트를 실패하게 된다. 이런 경우 테스트가 더 복잡해지면 실패 원인을 유추하는 데 어려움이 생긴다.

테스트 독립성을 보장하자

기본적으로 테스트는 순서에 무관해야 한다. a테스트가 수행된 이후에 b테스트가 수행되어야 성공한다는 개념은 없어야 한다. 독립적으로 언제 수행되던지 같은 결과를 내야 한다.

Test Fixture

 

미션

 

💬 회고

하루에 들어야 하는 강의 양이 생각보다 많아서 매일매일 진도표대로 듣지는 못했지만 워밍업클럽을 통해 약간의 강제성이 생겨 들어보고 싶었던 로드맵을 빠르게 훑어볼 수 있었다. 리팩토링이나 제대로 된 테스트코드 작성은 멀게만 느껴지고 막막했는데 강의를 듣고, 미션을 수행하다보니 어떤 방향으로 공부하고 적용시켜 나가야할지 어느 정도 감이 잡힌(?) 느낌이다. 계속 공부하면서 내것으로 만들기 위해 적용하고 발저시키는 연습을 해야겠다.

백엔드

답변 0