I'm using spring 3.2.0 and junit 4
This is my controller method which I need to test
@RequestMapping(value="Home") public ModelAndView returnHome(){ return new ModelAndView("Home"); }
spring-servlet config is:
<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" />
This is my test class :
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 { ...... ...... }
}
How can I test this method with MockMvc ?
Writing a Unit Test for REST Controller First, we need to create Abstract class file used to create web application context by using MockMvc and define the mapToJson() and mapFromJson() methods to convert the Java object into JSON string and convert the JSON string into Java object.
MockMvc provides support for Spring MVC testing. It encapsulates all web application beans and makes them available for testing. We'll initialize the mockMvc object in the @BeforeEach annotated method, so that we don't have to initialize it inside every test.
You can use your applications dispatcher servlet xml using the following annoations. The following example is hitting a controller with the path /mysessiontest setting some session attributes and expecting a certain view to be returned:
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")); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With