<aside> 📌 여기서 설명하는 코드는 Spring 기반 애플리케이션의 컨트롤러를 MockMvc를 통해 서비스 로직과 DB까지 접근하게 되므로 Slice 테스트라고는 할 수 없다. 하지만 MVC 동작을 테스트하는 코드를 작성하는 것에 중점을 둔다.
</aside>
@SpringBootTest
와 MockMVC
를 통한 테스트아래 예제 코드를 보자.
import com.codestates.member.dto.MemberDto;
import com.google.gson.Gson;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
class MemberControllerTest2 {
@Autowired
private MockMvc mockMvc;
@Autowired
private Gson gson;
@Test
void postMemberTest() throws Exception {
// given
MemberDto.Post post = new MemberDto.Post("[email protected]",
"홍길동",
"010-1234-5678");
String content = gson.toJson(post);
// when
ResultActions actions =
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content)
);
// then
MvcResult result = actions
.andExpect(status().isCreated())
.andExpect(jsonPath("$.data.email").value(post.getEmail())) // (1)
.andExpect(jsonPath("$.data.name").value(post.getName())) // (2)
.andExpect(jsonPath("$.data.phone").value(post.getPhone())) // (3)
.andReturn();
System.out.println(result.getResponse().getContentAsString());
}
}
@SprinBootTest
스프링부트 환경에서 쉽게 테스트를 실행할 수 있도록 설정해준다.
SpringContextLoader
를 기본 Context loader로 사용한다. 이 context loader는 테스트를 위한 application context(빈 컨테이너)를 로드하는 인터페이스이다.@SpringBootConfiguration
으로 설정 파일을 자동으로 찾는다.Environment
속성을 설정할 수 있게 한다.webEnvironment
모드를 제공한다. mock 포트를 랜덤으로 설정할 수 있다.