spring

Spring MVC 테스트코드 작성하기

Mar 18, 2020

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