Spring MVC 테스트코드를 작성해보자.
목차
1. 의존성 추가
2. 프로젝트가 JNDI를 사용하는 경우
3. 테스트 코드 작성
1. 의존성 추가
junit을 사용하기 위해서 pom.xml에 의존성을 추가한다.
<!-- junit & spring-test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.3.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.3.RELEASE</version>
<scope>compile</scope>
</dependency>
2. 프로젝트가 JNDI를 사용하는 경우
JUnit을 이용한 스프링 단위테스트시에 SpringJUnit4ClassRunner 클래스를 사용하는데 JNDI를 사용하는 경우 서버 정보가 WAS에 있으므로 별도의 서버 정보를 가져오는 클래스를 만들어서 사용한다.
public class ExtSpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {
public ExtSpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
super(clazz);
// TODO Auto-generated constructor stub
try {
bindJndi();
} catch (Exception e) {
}
}
private void bindJndi() throws Exception {
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.activate();
JndiTemplate jt = new JndiTemplate();
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(...);
ds.setUrl(...);
ds.setUsername(...);
ds.setPassword(...);
jt.bind("java:/../../../..", ds);
}
}
3. 테스트 코드 작성
ExtSpringJUnit4ClassRunner 클래스를 사용한다.
applicationContext를 불러온다.
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.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
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.status;
@RunWith(ExtSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"applicationContext.xml"
})
public class MainControllerTest {
@Autowired
MainController mainController;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(mainController).build();
}
@Test
public void mainControllerTest() throws Exception {
mockMvc.perform(get("/main"))
.andDo(print())
.andExpect(status().isOk());
}
}
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.transaction.annotation.Transactional;
import static org.junit.Assert.*;
@RunWith(ExtSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/egovframework/spring/com/context-*.xml",
"classpath:/egovframework/spring/com/idgn/context-*.xml",
"file:src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-*.xml"
})
public class MemberDaoTest {
@Autowired
MemberDAO dao;
@Autowired
MemberService service;
@Test
public void 회원조회_테스트() throws Exception {
MemberVO vo = new MemberVO();
vo.setMemberId("qwerty123@email.com");
MemberVO selectedMember = service.selectSetMember(vo);
assertEquals(selectedMember.getMemberId(), vo.getMemberId());
}
@Test
@Transactional
public void 회원수정_테스트() throws Exception {
MemberVO member = new MemberVO();
member.setMemberId("qwerty123@email.com");
member.setPwMiscnt(1);
service.updateMemeberPwMisCnt(member);
assertEquals(1, service.selectSetMember(member).getPwMiscnt());
}
}