Original link:http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/
翻译地址:http://www.cnblogs.com/zemliu/archive/2013/10/14/3367055.html
我自己写的例子:
public class PlayerControllerTest extends SpringWebTestCase { private MockMvc mockMvc; @Autowired private PlayerController controller; @Before public void setUp() { mockMvc = standaloneSetup(controller).build(); } @Test public void testRegister() throws Exception { MockHttpServletRequestBuilder mock = post("/register"); mock.contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("loginId", "peak") .param("name", "gogogo") .param("password", "111") .param("mobile", "139") .param("email", "peak@eastseven.com"); mockMvc.perform(mock) .andExpect(status().isOk()) .andExpect(content().contentType("application/json;charset=UTF-8")) .andExpect(content().json("{\"success\":true,\"message\":\"操作成功\"}")) .andDo(print()) .andReturn(); } }
为了简化静态引入,把父类里面加入了所有mock的方法进来,用的是Jackson
import java.net.URI; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.xml.xpath.XPathExpressionException; import org.hamcrest.Matcher; import org.springframework.http.HttpMethod; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.ResultHandler; import org.springframework.test.web.servlet.ResultMatcher; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.ContentResultMatchers; import org.springframework.test.web.servlet.result.CookieResultMatchers; import org.springframework.test.web.servlet.result.FlashAttributeResultMatchers; import org.springframework.test.web.servlet.result.HandlerResultMatchers; import org.springframework.test.web.servlet.result.HeaderResultMatchers; import org.springframework.test.web.servlet.result.JsonPathResultMatchers; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.ModelResultMatchers; import org.springframework.test.web.servlet.result.RequestResultMatchers; import org.springframework.test.web.servlet.result.StatusResultMatchers; import org.springframework.test.web.servlet.result.ViewResultMatchers; import org.springframework.test.web.servlet.result.XpathResultMatchers; import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.test.web.servlet.setup.StandaloneMockMvcBuilder; import org.springframework.web.context.WebApplicationContext; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring-mvc.xml" }) public class SpringWebTestCase extends SpringTransactionalTestCase { public static MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables) { return MockMvcRequestBuilders.get(urlTemplate, urlVariables); } public static MockHttpServletRequestBuilder get(URI uri) { return MockMvcRequestBuilders.get(uri); } public static MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables) { return MockMvcRequestBuilders.post(urlTemplate, urlVariables); } public static MockHttpServletRequestBuilder post(URI uri) { return MockMvcRequestBuilders.post(uri); } public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, String urlTemplate, Object... urlVariables) { return MockMvcRequestBuilders.request(httpMethod, urlTemplate, urlVariables); } public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, URI uri) { return MockMvcRequestBuilders.request(httpMethod, uri); } public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... urlVariables) { return MockMvcRequestBuilders.fileUpload(urlTemplate, urlVariables); } public static MockMultipartHttpServletRequestBuilder fileUpload(URI uri) { return MockMvcRequestBuilders.fileUpload(uri); } public static RequestBuilder asyncDispatch(final MvcResult mvcResult) { return MockMvcRequestBuilders.asyncDispatch(mvcResult); } public static ResultHandler print() { return MockMvcResultHandlers.print(); } public static DefaultMockMvcBuilder webAppContextSetup(WebApplicationContext context) { return MockMvcBuilders.webAppContextSetup(context); } public static StandaloneMockMvcBuilder standaloneSetup(Object... controllers) { return MockMvcBuilders.standaloneSetup(controllers); } public static RequestResultMatchers request() { return MockMvcResultMatchers.request(); } public static HandlerResultMatchers handler() { return MockMvcResultMatchers.handler(); } public static ModelResultMatchers model() { return MockMvcResultMatchers.model(); } public static ViewResultMatchers view() { return MockMvcResultMatchers.view(); } public static FlashAttributeResultMatchers flash() { return MockMvcResultMatchers.flash(); } public static ResultMatcher forwardedUrl(final String expectedUrl) { return MockMvcResultMatchers.forwardedUrl(expectedUrl); } public static ResultMatcher forwardedUrlPattern(final String urlPattern) { return MockMvcResultMatchers.forwardedUrlPattern(urlPattern); } public static ResultMatcher redirectedUrl(final String expectedUrl) { return MockMvcResultMatchers.redirectedUrl(expectedUrl); } public static ResultMatcher redirectedUrlPattern(final String expectedUrl) { return MockMvcResultMatchers.redirectedUrlPattern(expectedUrl); } public static StatusResultMatchers status() { return MockMvcResultMatchers.status(); } public static HeaderResultMatchers header() { return MockMvcResultMatchers.header(); } public static ContentResultMatchers content() { return MockMvcResultMatchers.content(); } public static JsonPathResultMatchers jsonPath(String expression, Object ... args) { return MockMvcResultMatchers.jsonPath(expression, args); } public static <T> ResultMatcher jsonPath(String expression, Matcher<T> matcher) { return MockMvcResultMatchers.jsonPath(expression, matcher); } public static XpathResultMatchers xpath(String expression, Object... args) throws XPathExpressionException { return MockMvcResultMatchers.xpath(expression, args); } public static XpathResultMatchers xpath(String expression, Map<String, String> namespaces, Object... args) throws XPathExpressionException { return MockMvcResultMatchers.xpath(expression, namespaces, args); } public static CookieResultMatchers cookie() { return MockMvcResultMatchers.cookie(); } public byte[] convertObjectToFormUrlEncodedBytes(Object object) { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); @SuppressWarnings("unchecked") Map<String, Object> propertyValues = mapper.convertValue(object, Map.class); Set<String> propertyNames = propertyValues.keySet(); Iterator<String> nameIter = propertyNames.iterator(); StringBuilder formUrlEncoded = new StringBuilder(); for (int index = 0; index < propertyNames.size(); index++) { String currentKey = nameIter.next(); Object currentValue = propertyValues.get(currentKey); formUrlEncoded.append(currentKey); formUrlEncoded.append("="); formUrlEncoded.append(currentValue); if (nameIter.hasNext()) { formUrlEncoded.append("&"); } } return formUrlEncoded.toString().getBytes(); } }
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import javax.sql.DataSource; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; @DirtiesContext @ContextConfiguration(locations = { "classpath*:/spring-core.xml"}) public abstract class SpringTransactionalTestCase extends AbstractTransactionalJUnit4SpringContextTests { protected static final Logger log = LoggerFactory.getLogger(SpringTransactionalTestCase.class); protected DataSource dataSource; @Override @Autowired public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); this.dataSource = dataSource; } protected <T> T creatRandomObject(Class<T> clazz, String... excludeFieldNames) { T obj = null; try { obj = clazz.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(clazz, IdEntity.class); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor descriptor : propertyDescriptors) { if ("class".equals(descriptor.getName()) || ArrayUtils.contains(excludeFieldNames, descriptor.getName())) { continue; } if (BeanUtils.isSimpleValueType(descriptor.getPropertyType())) { Object value = ConvertUtils.convert(RandomStringUtils.random(1, false, true), descriptor.getPropertyType()); Method writeMethod = descriptor.getWriteMethod(); if (writeMethod != null) { writeMethod.invoke(obj, value); } } } } catch (Exception e) { log.error(e.getMessage(), e); } return obj; } }
相关推荐
spring mvc的简单单元测试:,详细请参考:http://blog.csdn.net/xiejx618/article/details/21201007
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
这是一个测试事务管理的例子,希望对你们有所帮助,项目里子是在myeclipse中的maven创建的。myeclipse应该可以直接运行。
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...
Spring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot中的单元测试.pdfSpring Boot...
NULL 博文链接:https://zkf60553.iteye.com/blog/1604723
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean ...
单元测试案例junit +spring mvc +springboot
该项目的目标是证明: 如何使用 DispatcherServlet 为控制器编写单元测试来处理请求,从而在不需要运行 Servlet 容器的情况下近似完整的集成测试; 如何编写集成测试来测试所有应用程序层的集成,而无需运行 ...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
Spring+spring MVC+MyBatis示例程序,maven构建,程序演示了增、删、改、查、分页、单元测试等有代表性的操作,可供初学者借鉴。
spring mvc框架搭建demo,同时支持junit单元测试的实例demo。
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
Ant+Junit+Svn实现自动单元测试
spring4.0 mvc api 单元测试 文件上传 ,文件下载
session-data-redis解决分布式统一session管理,也有junit4单元测试,前端jQuery、bootstrap、以及其他很多流行的js组件。目前已经完整整合,即可做为restapi也可作为前端展示,一般的业务可以基于此快速开发,大幅...