본문 바로가기
카테고리 없음

Mockito 테스트

by ghan2 2024. 11. 24.

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하는 것이다.