[1.15] Unit Test

Always·2025년 1월 15일
1

매일메일

목록 보기
19/69

https://www.maeil-mail.kr/question/83
요약: 안전한 코드의 리팩토링을 위해서는 코드가 변경 될 때, 기존의 기능이 잘 동작하는지의 여부를 알 수 있어야한다. 이를 위해서 우리는 테스트 코드를 작성하고, 이 테스트 코드에는 유닛 단위의 단위 테스트와 전체 단위의 통합테스트가 존재한다.

유닛 테스트, 통합 테스트

  • 유닛 테스트 코드는 하나의 기능을 검증 하는 즉 하나의 메서드를 검증 하는 테스트 코드이다.
    • 즉 테스트 코드의 검증 단위가 모듈이 된다.
  • 통합 테스트는 각 모듈들이 결합해서 전체의 시스템이 잘 돌아가는 지를 확인하는 테스트 코드이다.

이 둘중에서는 당연히 유닛 테스트 코드가 훨씬 비용효율적이다.

왜냐하면 통합테스트의 디버깅시 해당 파트가 어디에서 오류가 났는지를 찾는데 시간이 걸리고, 통합테스트 내의 여러 모듈이 종속되어 있기 때문에, 이는 유지보수 관점에서 그리 좋은 테스트 코드가 아니다.

하지만 유닛테스트를 수행할 때, 만약 객체사이의 정보를 주고 받는 다면, 실제 객체를 넣는 것이 아닌 Mockito를 활용한 가짜 객체를 반드시 넣어주어야한다.

슬라이스 테스트

기본적으로 spring과 관련된 @SpringBootTest의 경우 spring환경에서 모든 컴포넌트들을 로드하고 세팅해서, 테스트 코드를 돌리므로 시간비용이 많이 들 수밖에 없다. 이럴 때 각 레이어, 즉 컨트롤러,서비스,리포지토리에 대해서만 테스트 코드가 필요하다면 @WebMvcTest, @DataJpaTest를 통해서 특정 컴포넌트만 스프링이 로드해서 테스트 하므로 상대적으로 빠르게 실행된다.

이 때 만약 다른 레이어에 종속되어 있다면 @MockBean등을 이용해서 모킹화 시켜주는 작업이 필요하다.

참고: https://tecoble.techcourse.co.kr/post/2021-05-18-slice-test/

profile
🐶개발 블로그

0개의 댓글