minlog
article thumbnail

 

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();

profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!