[java] Mockito를 사용하여 Spring MVC 컨트롤러를 테스트하는 방법은?

Spring MVC 컨트롤러를 테스트할 때 Mockito를 사용하면 가짜 객체를 생성하고 원하는 동작을 정의하여 컨트롤러 테스트를 쉽게 할 수 있습니다. Mockito는 Java 언어를 기반으로하는 강력한 mocking 프레임워크입니다. 아래는 Mockito를 사용하여 Spring MVC 컨트롤러를 테스트하는 방법입니다.

Mockito 설치

Maven이나 Gradle과 같은 의존성 관리 도구를 통해 Mockito를 프로젝트에 추가해야 합니다. 아래는 Maven을 사용하는 경우의 예시입니다.

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.12.4</version>
    <scope>test</scope>
</dependency>

Mockito를 사용한 Spring MVC 컨트롤러 테스트

  1. 테스트용 MockMvc 객체를 생성합니다.

     import org.springframework.test.web.servlet.MockMvc;
     import org.springframework.test.web.servlet.setup.MockMvcBuilders;
        
     // ...
        
     private MockMvc mockMvc;
        
     @BeforeEach
     public void setup() {
         mockMvc = MockMvcBuilders.standaloneSetup(new YourController()).build();
     }
    
  2. Mockito를 사용하여 필요한 가짜 객체를 생성하고 원하는 동작을 정의합니다.

     import static org.mockito.Mockito.*;
        
     // ...
        
     @Test
     public void testSomeMethod() throws Exception {
         // 가짜 객체 생성
         SomeService someServiceMock = mock(SomeService.class);
            
         // 가짜 객체의 동작 정의
         when(someServiceMock.someMethod()).thenReturn("Mocked response");
            
         // 컨트롤러에서 가짜 객체를 주입
         YourController yourController = new YourController();
         yourController.setSomeService(someServiceMock);
            
         // MockMvc를 사용하여 GET 요청 테스트
         mockMvc.perform(get("/your-url"))
             .andExpect(status().isOk())
             .andExpect(content().string("Mocked response"));
     }
    
  3. 테스트 메소드에서 가짜 객체를 컨트롤러에 주입하고 MockMvc를 사용하여 요청을 테스트합니다.

    위의 예시에서는 YourController라는 컨트롤러를 생성하고 SomeService라는 가짜 서비스 객체를 주입하였습니다. 그리고 /your-url로 GET 요청을 보내서 응답을 확인하고 있습니다.

이렇게 Mockito를 사용하여 Spring MVC 컨트롤러를 테스트할 수 있습니다. Mockito를 사용하면 테스트에서 필요한 가짜 객체를 손쉽게 생성하고 원하는 동작을 정의할 수 있습니다.

자세한 내용은 Mockito 공식 문서를 참고하시기 바랍니다.