inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

service
0

Layered Architecture 구조의 레이어별 테스트 정리

  1. Persistence Layer

  1. Business Layer

  1. Presentation Layer


Mocking에 대한 이해와 활용

Mock 객체를 활용하는 것이 단위 테스트의 핵심이라고 할 수 있다.

 

Mock 객체는 실제 객체의 행위를 대신할 수 있는 가짜 객체로, Mockito 같은 라이브러리를 활용해 쉽게 만들 수 있다.

 

중요한 것은 Mock 객체를 사용할 때, 실제 객체의 동작을 완벽하게 대체한다고 생각하지 말고 의심하고 검증하는 태도를 유지하는 것.

 

특히, Mock 객체의 역할과 Stub의 역할을 동시에 수행할 수 있다는 점을 배웠다.

또한, Mocking이 들어가는 순간 그것은 단위 테스트라는 개념을 다시 한번 되새길 수 있었습니다.


@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks의 차이

  1. @Mock: Mockito에서 단위 테스트를 위한 Mock 객체 생성. 행위 검증이 가능하다.

  2. @MockBean: Spring Boot 테스트 환경에서 Mock 객체를 사용하기 위해 Bean을 Mock으로 교체한다.

  3. @Spy: 실제 객체를 사용하면서 일부만 Stubbing을 할 수 있다.

  4. @SpyBean: Spring Boot 테스트 환경에서 Bean을 Spy 객체로 교체한다.

  5. @InjectMocks: @Mock과 @Spy로 생성된 객체를 테스트 대상 객체에 자동으로 주입해준다.


테스트 환경의 독립성 유지에 대한 고민

테스트의 독립성을 유지하는 것이 얼마나 중요한지를 다시 한번 느낄 수 있었다.

 

테스트 데이터가 @BeforeEach로 설정되면 모든 테스트에서 공유되는 데이터로 사용될 수 있다.

 

하지만, 테스트가 추가되거나 변경되면 해당 데이터가 정확히 어떤 테스트에서 필요한 것인지 혼란을 초래할 수 있다.

 

개인적으로는 각 테스트에서 필요한 데이터를 명시적으로 작성하는 방식이 더 명확하고 안전하다고 생각한다.

특히 예외적인 상황을 테스트하거나, 특정 요구사항을 검증할 때 명시적으로 데이터를 정의하는 것이 더 적합하다고 판단했다.


Spring REST Docs와 Swagger

Spring REST Docs와 Swagger는 문서화를 위한 좋은 도구들이다.

둘 다 장단점이 존재하므로, 팀의 환경과 목적에 맞게 적절히 선택하는 것이 중요하다고 생각한다.


회고와 느낀 점

이번 강의를 통해 테스트의 중요성과 모킹의 활용 방법을 깊게 배울 수 있었다.

특히, 단위 테스트와 통합 테스트를 구분해서 작성하는 방법을 익힌 것이 큰 성과라고 생각한다.

 

출처 : https://inf.run/EBCNE

백엔드

답변 0