복붙노트

[SPRING] MockMvc를 사용하여 스프링 컨트롤러 메소드를 테스트하는 방법은 무엇입니까?

SPRING

MockMvc를 사용하여 스프링 컨트롤러 메소드를 테스트하는 방법은 무엇입니까?

스프링 3.2.0과 4를 사용하고 있습니다.

이것은 테스트해야하는 컨트롤러 방법입니다.

@RequestMapping(value="Home")
public ModelAndView returnHome(){

return new ModelAndView("Home");    
}

spring-servlet config는 다음과 같습니다.

<context:annotation-config/>
    <context:component-scan base-package="com.spring.poc" />
    <mvc:annotation-driven /> 

    <bean id="jspViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />

이것은 내 테스트 수업입니다.

public class TestController {

private MockMvc mockMvc;

@Before
public void setup() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/");
    viewResolver.setSuffix(".jsp");
    this.mockMvc = standaloneSetup(new CController()).setViewResolvers(
            viewResolver).build();
}

@Test
public void CControllerTest() throws Exception {
    ......
    ......      
}

}

어떻게 MockMvc로이 메소드를 테스트 할 수 있습니까?

해결법

  1. ==============================

    1.다음 어노테이션을 사용하여 애플리케이션 디스패처 서블릿 xml을 사용할 수 있습니다. 다음 예제는 / ​​mysessiontest 경로를 사용하여 일부 세션 속성을 설정하고 특정보기가 반환 될 것으로 기대하는 컨트롤러를 치는 것입니다.

    다음 어노테이션을 사용하여 애플리케이션 디스패처 서블릿 xml을 사용할 수 있습니다. 다음 예제는 / ​​mysessiontest 경로를 사용하여 일부 세션 속성을 설정하고 특정보기가 반환 될 것으로 기대하는 컨트롤러를 치는 것입니다.

    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.mock.web.MockHttpServletRequest;
    import org.springframework.mock.web.MockHttpSession;
    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.setup.MockMvcBuilders;
    import org.springframework.web.context.WebApplicationContext;
    
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration({ "classpath:springDispatcher-servlet.xml" })
    
    public class MySessionControllerTest {
    
        @Autowired WebApplicationContext wac; 
        @Autowired MockHttpSession session;
        @Autowired MockHttpServletRequest request;
    
        private MockMvc mockMvc;
    
        @Before
        public void setup() {
            this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        }
    
        @Test
        public void getAccount() throws Exception {
            UserDomain user = new UserDomain();
            user.setFirstName("johnny");
    
            session.setAttribute("sessionParm",user);
            this.mockMvc.perform(get("/mysessiontest").session(session)
            .accept(MediaType.TEXT_HTML))
            .andExpect(status().isOk())
            .andExpect(view().name("test"));
        }
    }
    
  2. from https://stackoverflow.com/questions/14563489/how-to-test-a-spring-controller-method-by-using-mockmvc by cc-by-sa and MIT license