inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 3기 BE 클린코드&테스트 - 3주차 발자국

박소연
0

🐾 발자국

워밍업 클럽 3기 BE 클린코드 & 테스트 - 3주차를 듣고 작성하는 발자국입니다

이번에 들은 강의 바로 가기


📃 회고

[워밍업 클럽 3주차를 들으며 .. ]

3주차 발자국을 제출하는 걸 깜박한 바보가 있다 ? 🤔

바로 접니다 ...... 바보 ......

강의를 모두 듣고 해야하는게 없는 줄 알고 주말동안 디스코드에 들어가고 있지 않다가

월요일날 발자국을 안썼다는 사실이 갑자기 떠올랐습니다

워밍업클럽 완주 조건은 발자국을 모두 작성하는 것이다보니깐 완주는 못하겠다 생각하고 있었는데

완주 유예기간이 생겨서 후다닥 3주차 발자국을 작성하게 되었답니다 🙌

3주차는 Day11 미션과 Persistence Layer / Business Layer / Presentation Layer 로 나눠서 각 영역별로

본격적인 테스트코드에 대해서 배우는 주였습니다.

사실 실무에서 테스트코드를 짜야지 짜야지 말만 하고 못짠 이유가 테스트가 어렵다라는 편견때문이였는데

강의를 듣고 테스트 코드를 어떻게 짜야하는지 감이 잡히고 나니깐 테스트 코드가 겁먹을 게 아니구나 라는 생각이 들었습니다.


📺 강의 내용 정리

섹션6 레이어 아키텍처와 테스트

 

섹션6 Persistence Layer

@ActiveProfiles("test")
@DataJpaTest // Jpa 관련 빈들만 주입해준다
class ProductRepositoryTest {

    @Autowired
    private ProductRepository productRepository;

    @DisplayName("원하는 판매상태를 가진 상품들을 조회한다.")
    @Test
    void findAllBySellingStatusIn() {
        // given
        Product product1 = Product.builder()
                .productNumber("001")
                .type(HANDMADE)
                .sellingStatus(SELLING)
                .name("아메리카노")
                .price(4000)
                .build();

        Product product2 = Product.builder()
                .productNumber("002")
                .type(HANDMADE)
                .sellingStatus(HOLD)
                .name("카페라떼")
                .price(4500)
                .build();

        Product product3 = Product.builder()
                .productNumber("003")
                .type(HANDMADE)
                .sellingStatus(STOP_SELLING)
                .name("팥빙수")
                .price(7000)
                .build();
        productRepository.saveAll(List.of(product1, product2, product3));

        // when
        List<Product> products = productRepository.findAllBySellingStatusIn(List.of(SELLING, HOLD));

        //then
        assertThat(products).hasSize(2)
                .extracting("productNumber", "name", "sellingStatus")
                .containsExactlyInAnyOrder(
                        tuple("001", "아메리카노", SELLING),
                        tuple("002", "카페라떼", HOLD)
                );
    }
}

 

섹션6 Business Layer

@DisplayName("주문번호 리스트를 받아 주문을 생성한다.")
@Test
void createOrder() {
     // given
     LocalDateTime registeredDateTime = LocalDateTime.now();
 
     Product product1 = createProduct(HANDMADE, "001", 1000);
     Product product2 = createProduct(HANDMADE, "002", 3000);
     Product product3 = createProduct(HANDMADE, "003", 5000);
     productRepository.saveAll(List.of(product1, product2, product3));
 
     OrderCreateRequest request = OrderCreateRequest.builder()
          .productNumbers(List.of("001", "002"))
          .build();
 
     // when
     OrderResponse orderResponse = orderService.createOrder(request, registeredDateTime);
 
     //then
     assertThat(orderResponse.getId()).isNotNull();
     assertThat(orderResponse)
          .extracting("registeredDateTime", "totalPrice")
          .contains(registeredDateTime, 4000);
     assertThat(orderResponse.getProducts()).hasSize(2)
          .extracting("productNumber", "price")
          .containsExactlyInAnyOrder(
               tuple("001", 1000),
               tuple("002", 3000)
     );
}

 

섹션6 Presentation Layer


미션

DAY11 미션 - 단위 테스트 작성하기

 

내용

 

https://inf.run/CBsAt

답변 0