比Dao和Service的测试稍微复杂一点。还是先写一个BasicWebTest用来总体配置:

@WebAppConfiguration
@ContextConfiguration(locations= {"classpath:spring/applicationContext.xml","classpath:spring/spring-servlet.xml"})
public class BasicWebTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired
protected WebApplicationContext wac; protected MockMvc mvc; @Before
public void setUp() {
this.mvc=MockMvcBuilders.webAppContextSetup(wac).build();
}
}
BasicWebTest 上面多了个 @WebAppConfiguration 注解,并且类中也多了一些方法、字段。直接复制吧。
测试用例如下:
package com.suyin.controller;

import java.util.List;

import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import com.jayway.jsonpath.JsonPath;
import com.suyin.BasicWebTest;
import com.suyin.pojo.People;
@SuppressWarnings("unchecked")
public class PeopleControllerTest extends BasicWebTest { @Test
public void queryAll() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/people/queryAll"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("people/list"))
.andExpect(MockMvcResultMatchers.request().attribute("list", new MatcherAdapter() { @Override
public void describeMismatch(Object item, Description mismatchDescription) {
mismatchDescription.appendText("wrong list size");
} @Override
public boolean matches(Object item) {
List<People> list=(List<People>) item;
return list.size()==;
} }));
}
@Test
public void asynQueryAll() throws Exception {
MvcResult mr=mvc.perform(MockMvcRequestBuilders.get("/people/asynQueryAll").content("{\"id\":1}"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").exists())
.andReturn(); MockHttpServletResponse response=mr.getResponse();
MockHttpServletRequest request=mr.getRequest();
} @Test
public void update1() throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/people/update").param("id", "")
.param("name", "Jack")
.param("address", "japan")
.param("age", ""))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("people/detail")); }
@Test
public void update2() throws Exception { mvc.perform(MockMvcRequestBuilders.post("/people/update")
//.param("name", "Jack")
.param("address", "japan")
.param("age", ""))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("error"));
} @Test
public void add1()throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/people/add")
.param("name", "JJJJ")
.param("address", "")
.param("age", "")
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("people/detail"));
}
@Test
public void add2()throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/people/add")
.param("address", "")
.param("age", "")
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("error"));
} abstract class MatcherAdapter<T> implements Matcher<T>{ @Override
public void describeTo(Description arg0) {
// TODO Auto-generated method stub } @Override
public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
// TODO Auto-generated method stub } @Override
public abstract void describeMismatch(Object item,
Description mismatchDescription); @Override
public abstract boolean matches(Object item) ; }
}

认真说来关于Controller的Spring测试就这样了。在多就是关于MockMvc的API学习了。

spring 4.0 JUnit简单的Controller测试的更多相关文章

  1. spring 4.0 JUnit简单的Dao,Service测试

    1.AbstractTransactionalJUnit4SpringContextTests 和AbstractJUnit4SpringContextTests.我们在测试用例类要继承两种中的一个. ...

  2. 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...

  3. 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...

  4. spring boot web开发 简单的增删改查和spring boot 自带的Junit测试 案例

    创建 web项目 配置pom.xml文件   ------相当于jar包 配置application.yml -----配置文件(spring数据库连接.server服务.logging日志等) 创建 ...

  5. 021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试

    一.概述 二.Junit方式使用 2.1.基本使用 eclipse在新建的类上,右键→new→Junit Test Case,修改一下Source folder,选择src/test/java,下一步 ...

  6. spring && Cobertura && maven &&junit 单元测试以及测试覆盖率

    1. 目的:       junit 单元测试,Cobertura   测试覆盖率报告       项目目录结构          2. maven 配置     <project xmlns= ...

  7. ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例

    一 . 需求 学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅! 本文将记录整合struts + spring的过程 , ...

  8. 使用spring 4.0 + maven 构建超简单的web项目

    一.需求 使用spring去管理web项目,是目前非常流行的一种思路,本文将介绍使用maven+spring 4.0.2 来构建一个简单的web项目. 二.实现 1.新建一个maven项目,如下图所示 ...

  9. Spring Boot 解决方案 - JUnit 测试

    简单的 JUnit 项目 回顾一下创建并运行简单的 JUnit 测试项目,先添加 JUnit 依赖然后编写类似如下模板的测试类,使用 IDE 的话直接用插件运行就行, 使用 Maven 的话运行命令 ...

随机推荐

  1. UVALive - 6257 K - Chemist's vows 【DFS】【BFS】【DP】

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  2. 每天一个Linux命令(4)touch命令

    touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来:二是用来创建新的空文件.     (1)用法 用法:touch [选项]... ...

  3. 剑指offer之 整数中1出现的次数

    public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count=0; for(int i=1; ...

  4. docker仓库及数据卷

    docker help rmi, 删除本地镜像 docker run -it --name=centos centos:latest /bin/sh  --name的选项可以方便我们以后引用此imag ...

  5. neutron VPC

    The goal of this document is to provide an umbrella blueprint defining how to add support for VPC in ...

  6. C++的栈

    栈,是一种存储受限的线性数据结构,在存储和访问数据的时候只能访问栈的一端.栈类似于一摞盘子,只能拿去最上面的盘子,也只能把盘子放到最上面.由于这种特点,栈是一种后进先出(Last in / First ...

  7. HDU 4089 Activation:概率dp + 迭代【手动消元】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...

  8. 聊聊js跨域

    推荐先读一下这篇文章: https://segmentfault.com/a/1190000012469713http://www.dailichun.com/2017/03/22/ajaxCross ...

  9. php设计模式课程---1、什么是设计模式

    php设计模式课程---1.什么是设计模式 一.总结 一句话总结:经典场景的经典解决方法. 经典场景的经典解决方法 1.设计模式使用的通俗场景有哪些? 比如:拍电影时,常用设计模式 感情狗血剧:误会模 ...

  10. php发邮件:swiftmailer, php邮件库——swiftmailer

    php发邮件:swiftmailer, php邮件库——swiftmailer 最近看到一个好的php邮件库,与phpmailer作用一样,但性能比phpmailer好,尤其是在处理附件的能力上,发送 ...