이번 개인과제는 기존의 만들었던 ToDo application에 대한 테스트코드작성을 했다.
코드를 구현하면서 기록에 남길만한 것들을 추려서 작성해볼것이다.
우선적으로 테스트코드의 작성에 있어서 slice test
에 대해 짚고 넘어갈것이다.
slice test는 앞서 게시한 단위테스트처럼 layer단위로 계층을 격리시켜 테스트하는 방법이며 이 과정에서 Mockito에 대해 알고 넘어가야한다.
Mockito는 layer간 계층을 격리시켜 테스트하기위해 여러 에노테이션을 제공하는데 몇개를 추려보자면
@mock
: 해당 객체를 가짜객체로서 생성해준다.
@Mockbean
: 해당 객체를 가짜 bean으로 등록시켜준다.
@mock
은 우리가 서비스 레이어를 테스트한다고 가정했을때 서비스 레이어는 대부분의 경우에서 레포지토리 레이어와 관계를 맺어져있다. 온전히 서비스레이어만 테스트하기위해선 레포지토리 레이어를 격리시켜야하는데 이때 @mock
을 사용하여 해당 레포지토리를 가짜 객체로서 등록시킨후
given(구현된 코드).willreturn(우리가 바라는 실행됬을때 결과)
를 사용하여 해당 레포지토리의 기능동작을 우리가 원하는대로 만든후 서비스레이어에만 집중된 테스트를 진행시킬수 있다. 다른 컨트롤러 레이어도 마찬가지이다. 내가 만든 ToDo application에서 컨트롤러 레이어는 필터와 스프링 시큐리티와 밀접한 관계를 맺고있어 해당 컨트롤러만 테스트하기 힘들수 있었지만 mockito 에서 @WebMvcTest
라는 어노테이션을 통해 필터와 시큐리티는 무시한 후 해당 컨트롤러로 들어오는 클라이언트의 요청을 구현해서 테스트 할수있는 환경을 제공해준다. 서비스 레이어와 레포지토리 레이어도 각각 @ExtendWith
과 @DataJpaTest
에노테이션을 제공함으로써 원활한 테스트 환경을 제공해준다.