SpringFramework/JUnit Test

테스트 코드 작성

lovineff 2020. 6. 10. 11:49

MockMVC

내장 Tomcat을 생략한 테스트

서블릿을 Mocking한 것이 구동

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void hello() throws Exception {
        mockMvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string("hello"))
                .andDo(print());
    }
}

 

MockMVC를 주입받는 방법

@SpringBootTest + @AutoConfigureMockMvc 애노테이션

통합테스트시 사용

필요한 모든 의존성을 자동으로 입력해준다.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
 @Autowired
 private MockMvc mockMvc;

 

@WebMvcTest 애노테이션

MVC 쪽만 Slice 테스트시

필요한 의존성을 직접 넣어야한다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class MyControllerTest {
 @Autowired
 private MockMvc mockMvc;

 

RANDOM_PORT

내장 Tomcat을 포함한 테스트

사용 가능한 포트를 자동으로 구동

WebFlux 테스트

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // 내장 톰캣 사용
class UserControllerTest {
    @Autowired
    WebTestClient webTestClient;    // Webflux에 추가된 RestClient 비동기 동작을함.

    @Test
    public void test() throws Exception{
        webTestClient.get().uri("/api/user/list")
            .exchange()
            .expectStatus().isOk()  // response 상태값 정상 여부
            .expectHeader()
                .contentType(MediaType.APPLICATION_JSON)// Header contentType 확인
            .expectBodyList(User.class) // Response의 타입이 User.class 확인
            .hasSize(8)             // Response List 사이즈가 8개 확인
            .returnResult()         // Response로 부터 결과 획득
            .getResponseBody();     // User.class로 변환된 결과 반환
    }
}

 

 

'SpringFramework > JUnit Test' 카테고리의 다른 글

SpringBoot JUnit5 의존성 설정  (0) 2020.11.24
Spring Seurity 적용시 테스트 방안  (0) 2020.06.10
Assert 함수  (0) 2020.06.10
관련 어노테이션  (0) 2020.06.10
JUnit4로 변경  (0) 2020.06.10