在spring-mvc中測試controller層,通常比較麻煩,由於沒有web容器中的那種上下文環境,而啓動容器測試又不夠優雅。java
maven依賴,其中須要注意的是用到了spring-test-mvc,這麼一個框架。git
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.13.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test-mvc</artifactId> <version>1.0.0.M1</version> <scope>test</scope> </dependency>
和普通的spring測試稍有不一樣的是多了一個註解@WebAppConfiguration, 其中用到了模擬對象MockMvc,這是spring-test-mvc框架中的東西,java 代碼以下:web
package com.spring.demo.web.controller; import static org.junit.Assert.assertNotNull; import static org.springframework.test.web.server.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.server.result.MockMvcResultMatchers.forwardedUrl; import static org.springframework.test.web.server.result.MockMvcResultMatchers.status; 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.server.MockMvc; import org.springframework.test.web.server.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import com.spring.demo.init.AppConfig; import com.spring.demo.init.web.MvcConfig; /** * 使用模擬對象測試controller * * @author sean * */ @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { AppConfig.class, MvcConfig.class }) public class PingControllerTest { @Autowired private WebApplicationContext applicationContext; private MockMvc mockMvc; @Before public void setUp() { mockMvc = MockMvcBuilders .webApplicationContextSetup(applicationContext).build(); } @Test public void test() throws Exception { assertNotNull(mockMvc); mockMvc.perform(get("/ping/show")).andExpect(status().isOk()) .andExpect(forwardedUrl("/WEB-INF/pages/ping/show.jsp")); } }
具體項目,請參考springDemo
spring