Mockito 기본 사용
천리길도 한 걸음부터라고 기본 사용 방법부터 보자. 먼저 의존성을 추가한다.
<dependencies>
<!-- 다른 의존성들... -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.11.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.11.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
이후 Mockito를 사용할 테스트 클래스에서 Mockito 확장을 가져온다.
@ExtendWith(MockitoExtension.class)classUserServiceTest {
}
이제 테스트에서 객체(StudyRepository)를 Mock하면 된다. 아래 예제에서는 StudyRepository를 Mock해서 findById 메서드의 인수로 1L이 들어왔을 때 study가 반환되도록 한다.
@ExtendWith(MockitoExtension.class)publicclassStudyServiceTest {
@Mock
StudyRepository studyRepository;
@TestvoidcreateStudyService() {
StudyService studyService =new StudyService(studyRepository);
Study study =new Study(1L, "Math");
when(studyRepository.findById(1L)).thenReturn(Optional.of(study));
Optional<Study> result = studyService.get(1L);
assertEquals("Math", result.get().getName());
}
}
studyService.get() 메서드 내부에서는 studyRepository.findById(1L)을 호출한다. (생략)
단위테스트에서는 Repository를 배제하고 Service가 잘 동작하는지만 테스트하므로 studyRepository.findById(1L)이 반드시 정해진 결과를 반환하도록 Mocking하는 것이다.