🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

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

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

🐾 발자국

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

이번에 들은 강의 바로 가기


📃 회고

드디어 워밍업 클럽 3기가 끝나는 4주차가 다가왔습니다 🥹

시간이 정말 빠르네요 ,,

처음 시작할 때는 강의 커리큘럼을 제때제때 들어야지 했는데 한 번 밀리니깐 진짜 한도 끝도 없이 밀리더군요

그래도 완강한 것에 의의를 두기로 했습니다


📺 강의 내용 정리

섹션 7 Mock 을 마주하는 자세

  • 외부 서비스가 있을 때 테스트하기 위해서 항상 호출할 수 없으니 이런 경우 Mocking 을 사용

@MockitoBean
private MailSendClient mailSendClient;
Mockito.when(mailSendClient.sendEmail(any(String.class), any(String.class), any(String.class), any(String.class)))
        .thenReturn(true);
  • 위처럼 MailSendClient 를 Mock 처리해주고, 무조건 true 가 리턴하도록 Mocking 처리를 해줄 수 있다.

  • Test Double

    • Dummy : 아무것도 하지 않는 깡통 객체

    • Fake : 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체

    • Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체 그 외에는 응답하지 않는다.

    • Spy : Stub 이면서 호출된 내용을 기록하여 보여줄 수 있는 객체, 일부는 실제 객체처럼 동작시키고 일부만 Stubbing 할 수 있다.

    • Mock : 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체

  • BDDMockito 를 사용하면 mockito.when 을 한 번 더 감싸 이름만 변경해서 given 으로 사용 가능

 

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

  • 한 문단에 한 주제의 테스트만 작성하자

  • 제어할 수 없는 변수보다는 고정된 날짜와 고정된 값을 사용하자

  • 테스트를 이해하기 위해서 논리구조가 들어가는 구조는 사용하지 말자

  • 테스트 간 순서가 없어야하고 독립성을 보장해야 한다

  • 테스트가 독립될 수 있도록 구성하자

  • 값이나 환경에 대해서 데이터를 바꿔서 여러번 실행하고 싶을 때 @ParameterizedTest 사용

  • 시나리오를 작성하고 싶다면 @DynamicTest 사용

  • 각 테스트 파일이 실행될 때마다 Spring Boot 서버가 실행되기 때문에 동일한 환경에서 테스트 코드가 구현될 수 있도록 관리필요

  • private 메서드의 테스트가 필요하다면 객체를 분리할 시점인지 의문을 던져보기

  • 테스트에서 필요한 메소드를 만들어돈 되지만 보수적으로 접근하자.

 

섹션 9 Appendix

  • 학습 테스트 : 잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해서 작성하는 테스트

  • Spring REST Docs :테스트 코드를 통해 API 문서 자동화하는 도구

     


미션

DAY 16 - Layered Architecture 구조의 레이어별 특징

Persistence Layer

  • DB 와의 상호작용을 담당하며, 데이터에 직접적으로 접근하는 계층

  • 테스트 방법

    • 데이터베이스에 CRUD 가 제대로 수행되는지 확인

      • 비즈니스로직이 들어가는게 아니라 데이터에 집중

      • 실제 데이터베이스를 사용하여 통합 테스트를 진행

Business Layer

  • 비즈니스 로직을 담당하며, 실제 핵심적인 작업을 수행

  • 테스트 방법

    • 비즈니스 로직에서 발생할 수 있는 예외 상황을 처리하는 테스트를 집중적으로 작성

      • 비즈니스 로직 자체의 정확성을 확인하고 다양한 입력에 대한 예외 케이스 를 포함한 정상 동작 검증

Presentation Layer

  • 외부 요청을 받는 계층으로 사용자 인터페이스나 외부 API와의 상호작용을 담당

  • 테스트 방법

    • 하단의 레이어는 모킹처리하여 실제 구현이 아닌 가짜 구현으로 테스트 진행

      • 사용자가 입력한 파라미터가 유효한지, 잘못된 값이 들어오지 않았는지 유효성 검사 케이스를 포함해야 한다

 

DAY 18 - @Mock

워밍업 클럽 3기 BE 클린코드&테스트 - DAY18 미션

 

 

댓글을 작성해보세요.

채널톡 아이콘