Mockito

최대 1 분 소요

Mockito란??

Mock객체를 만들기 위한 프레임워크.

사용이유:

테스트할 서비스클래스를 들여다보면 DB접근을 위한 많은 의존성을 맺고있을 때가있다.
그것들을 테스트하기가 상당히 까다로운데
(DB에있는 데이터를 로딩하기위해 실제로 DB에 데이터가 있어야하는데 테스트시마다 그 데이터들을 일일이 넣어줄것인가??)
해결방법으로 Mockito를 사용할 수 있다.

테스트방법:

1. 가짜객체를 생성

Mock 객체를 사용하여 가짜객체를 생성해낸다.

DetectionInfoService detectionInfoService = Mock.mockito(DetectionInfoService.class);

2. 특정 메소드에대한 결과값 설정.

위에서 가짜객체를 생성했다면, 가짜로 생성된 객체에대해 특정 메소드에대한 결과를 설정할 수 있다.

Mockito.when(detectionInfoService.getDetectionInfoByParams(detectionInfoRequest))
  .thenReturn(new ArrayList<>());

getDetectionInfoByParams() 라는 메소드를 실행할때, (when)
해당 메소드의 리턴값을 new ArrayList<>() 로 리턴해주세요, (thenReturn) 라고 위와같이 설정해줄 수 있다.

3. 검증

설정이 끝났다면, 가짜로 생성한 객체를 이용해 서비스를 호출하고, 호출애대한 리턴값을 Assertions(assertj의객체인)객체를 통해 검증한다.

// 서비스호출. 
List<FdsLocationInfo> detectionInfoList = detectionInfoService.getDetectionInfoByParams(detectionInfoRequest);

// 검증
Assertions.assertThat(detectionInfoList).isNotNull();

전체코드

// 1. 객체생성
DetectionInfoService detectionInfoService = Mock.mockito(DetectionInfoService.class);

// 2. 특정 메소드에대해 결과값 설정 
Mockito.when(detectionInfoService.getDetectionInfoByParams(detectionInfoRequest))
  .thenReturn(new ArrayList<>());
  
// 3. 서비스호출. 
List<FdsLocationInfo> detectionInfoList = detectionInfoService.getDetectionInfoByParams(detectionInfoRequest);

// 4. 검증
Assertions.assertThat(detectionInfoList).isNotNull();

카테고리:

업데이트: