Test Code - Controller
각 메서드를 테스트 하는 것이 아니고 컨테이너 자바 클래스 전체를 테스트 코드로 테스트 하는 방법이 있다.
톰켓을 실행하지 않고 가상으로 서버를 구성해서 메모리를 전달하는 방식으로 실행된다.
📑 BoardMapperTest.java
package kr.bit.controller;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import kr.bit.Mapper.BoardMapperTest;
import lombok.extern.log4j.Log4j;
@Log4j
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"file:src/main/webapp/WEB-INF/spring/root-context.xml",
"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
public class BoardControllerTest {
@Autowired
private WebApplicationContext ctx;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc=MockMvcBuilders.webAppContextSetup(ctx).build();
}
@Test
public void testList() throws Exception{
log.info(
mockMvc.perform(MockMvcRequestBuilders.get("/board/list"))
.andReturn()
.getModelAndView()
);
}
}
1. 통합 테스트 설정
1) 코딩 도중에 프로그램의 로그를 기록시켜준다.
@Log4j
2) JUnit4.x 프레임워크가 내장된 Runner를 실행할 때 SpringRunner.class라는 확장된 클래스를 실행
@RunWith(SpringJUnit4ClassRunner.class)
3) 테스트를 할때WebApplicationContext가 로드되었다는것을 보장해주고, 웹 어플리케이션의 루트 패스인 "file:src/main/webapp"를 디폴트 값으로 사용하는것을 보장하는 것이다.
@WebAppConfiguration
4) 통합 테스트를 위한 어플리케이션 컨텍스트를 어떻게 구성 하고, 로드 하는지를 정의한다.
@ContextConfiguration({"file:src/main/webapp/WEB-INF/spring/root-context.xml",
"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
특히, @ContextConfiguration은 어플리케이션 컨텍스트 리소스의 위치(location) 혹은 컨텍스트를 로드할때 사용되는 클래스의 컴포넌트를 선언한다.
- root-context.xml 데이터베이스 리소스
- servlet-context.xml 뷰사용을 위한 리소스
2. 통합 테스트 설정
1) ServletContext를 반환.
@Autowired
private WebApplicationContext ctx;
2) 가상의 mvc환경을 만들어준다.
private MockMvc mockMvc;
3) 테스트 메서드 실행 전 컨트롤러를 가상의 톰켓 mvc 환경에 올린다.
@Before
public void setup() {
this.mockMvc=MockMvcBuilders.webAppContextSetup(ctx).build();
}
4) 테스트 메서드를 정해서 실행시킨다.
@Test
public void testList() throws Exception{
...
}
- 출력
log.info( ... )
- 컨트롤러에게 요청
mockMvc.perform(MockMvcRequestBuilders.get("/board/list"))
※ MockMvcRequestBuilders : 요청을 만들어주는 객체
-리턴
.andReturn()
-모델과 뷰를 받아오는 메서드
.getModelAndView()
- 뷰 이름 만 출력 가능
.getModelAndView().getViewName()
- 모델 안에 들어있는 값만 출력 가능
.getModelAndView().getModelMap();
'BackEnd > Spring Boot' 카테고리의 다른 글
[ Spring Boot ] Server 연결 (1) Get/Post- UriComponentsBuilder · RestTemplate (0) | 2023.03.12 |
---|---|
[ Spring Boot ] Exception 예외 처리 방법 (0) | 2023.03.10 |
[ Spring Boot ] Validation (2) - @AssertTrue/False , Custom Annotation (0) | 2023.03.09 |
[ Spring Boot ] Validation (1) (0) | 2023.03.08 |
[ Spring ] Annotation 정리 (1) (0) | 2023.03.07 |