[JUnit] Service 테스트하기

DEINGVELOP·2022년 9월 12일
0

JUnit으로 Service 테스트하기

Service는 Controller와 Repository(Domain)에 모두 의존하고 있다. 따라서 결합을 두 군데 모두 끊어줘야 온전히 Service만의 테스트가 가능해진다.


1. Controller와의 연결 끊기

Controller는 Web모듈이므로, Controller와의 결합을 끊으려면 Service Test가 Web에 대한 의존성을 받지 않도록 설정하여야 한다.

➡ Web 관련 설정 테스트인 @WebMvcTest, @SpringBootTest 등의 테스트를 사용하는 것은 Service만을 테스트하는 것에 적절하지 않다.


2. Repository와 연결 끊기

Domain을 통해 비즈니스 로직은 수행해야 하지만, 실제로 DB에 저장할 것은 아니기 때문에 이를 분리하고 제거할 방법이 필요하다.

SpringBoot 테스트는 특정 객체를 가짜 객체로 대체할 Mocking이라는 기능을 제공하고 있으며, 관련하여 @Mock, @MockBean, @Spy, @SpyBean 등의 Annotation을 제공한다.

@Mock

@Mock으로 선언한 객체는 의존하고 있는 실제 객체 대신, @Mock으로 선언한 객체로 바꿔치기된다.

➡ 따라서 Service 내에 의존하고 있는 Repository를 @Mock으로 선언하면, Repository Bean에 의존하지 않고 테스트가 가능해진다.

➡ 그리고 Service 객체를 @InjectMocks로 선언하면, @Mock으로 선언된 가짜 객체들을 의존한 Service 객체가 생성된다.





참고자료

0개의 댓글