controller 测试 不使用其他api接口测试工具

一般而言,我们写好一个模块后,会对其进行单元测试,再集成到现有的系统中。

但是呢~针对Controller、Service、Dao三层来说,我们最常的是对Service和Dao进行单元测试。然而Controller的测试,很多人还是启动Tomcat,使用Postman进行api测试,这样不仅需要等待很长的编译部署时间,而且无法逐个Controller功能进行单独测试,因此特意总结Controller层的单元测试。顺便说下,Postman挺好用的,只是我们仍然需要启动tomcat,有点浪费时间。

那么,我们需要有一种不需启动tomcat就可以测试controller层的方法。

接下来我们细细讲来。

controller所采用的是SpringMVC框架 。SpringMVC已经继承了单元测试的类

步骤:

1.创建普通类文件

2.引入Spring单元测试注释

@RunWith(SpringJUnit4ClassRunner.class) // 此处调用Spring单元测试类
@WebAppConfiguration // 调用javaWEB的组件,比如自动注入ServletContext Bean等等
@ContextConfiguration(locations = { "classpath:context.xml", "classpath:mvccontext.xml" }) // 加载Spring配置文件
public class TestPayTypeController {
@Autowired
PayTypeController payTypeController;//测试的controller类 @Autowired
ServletContext context; MockMvc mockMvc; @Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(payTypeController).build();
}
}

注意:

@WebAppConfiguration如果不加的话,是没法调用WEB的一些特性的。经常会被遗忘掉。。。

@ContextConfiguration中,需要把所有Spring的配置文件全部加载进来,因为有的项目中Spring 的xml配置是分拆的。 此处的xml是放在resources的根目录中。

3.引入spring注解后,Controller的单元测试需要模拟Server的运行,需要在class中进行WEB环境的初始化。

MockMvc是SpringMVC提供的Controller测试类

每次进行单元测试时,都是预先执行@Before中的setup方法,初始化PayTypeController单元测试环境。

4.前期准备工作都做好了。可以编写单元测试方法了。

先看get方法请求

ResultAction是用来模拟Browser发送FORM表单请求的。get()是请求的地址,accept()请求的内容 ;

@org.junit.Test // get请求
public void getListTest() throws Exception {
// 发送请求
ResultActions resultActions = this.mockMvc
.perform(MockMvcRequestBuilders.get("/paytype/list/all").accept(MediaType.APPLICATION_JSON));
MvcResult mvcResult = resultActions.andReturn();
String result = mvcResult.getResponse().getContentAsString();
System.out.println("客户端获的数据:" + result);
}

在控制台打印如下,说明成功了!

接下来使用post 请求;

ResultAction是用来模拟Browser发送FORM表单请求的。post()是请求的地址,accept()请求的内容 param()请求的键值对,如果有多个参数可以后缀调用多个param();

MvcResult是获得服务器的Response内容。

@org.junit.Test // post请求
public void addTest() throws Exception {
// 发送请求
ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/paytype/add")
.accept(MediaType.APPLICATION_JSON).param("typename", "一年停").param("payfee","4444.0").param("payto", "post"));
MvcResult mvcResult = resultActions.andReturn();
String result = mvcResult.getResponse().getContentAsString();
System.out.println("客户端获的数据:" + result);
}

成功插入数据库;

一般常用的就get,post请求;至此,我们不需启动tomcat就能测试controller层的method。

附上controller类的method

    @RequestMapping(value = "/add", method = RequestMethod.POST)
public ResultMessage add(PayTypeModel ptm) throws Exception {
ResultMessage result = new ResultMessage();
payTypeService.add(ptm);
result.setResult("Y");
result.setMessage("增加缴费类型成功");
return result; } @RequestMapping(value="/get",method=RequestMethod.GET)
public PayTypeModel get(@RequestParam int typeno) throws Exception
{
return payTypeService.get(typeno);
}

如有错误,欢迎留言指正!

最新文章

  1. request对象详解
  2. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
  3. CMD命令之 :修改windows的CMD窗口输出编码格式为UTF-8
  4. js跳转到页面中指定的hash
  5. 帝国cms实现自动生成缩略图和自动分页功能
  6. Android中使用开源框架android-image-indicator实现图片轮播部署
  7. Shell学问: 调用脚本之间
  8. C++ Primer第九章课后编程问题
  9. jQuery写选项卡
  10. 用Open SSH生成公钥和私钥(Win)
  11. Ubuntu16.04安装及配置nginx
  12. 工作经验-类型转换[ java.lang.String]
  13. IIS7下,显示PHP错误(不显示500错误,而显示详细错误)
  14. python包中__init__.py的作用
  15. Python入门:如何使用第三方库?
  16. 5. BERT算法原理解析
  17. scrapy中Request中常用参数
  18. 通过WinAPI播放PCM声音
  19. tensorflow中 tf.add_to_collection、 tf.get_collection 和 tf.add_n函数
  20. NABC for Teamproject

热门文章

  1. jconsole性能监控
  2. php的数组
  3. 《第40天 : JQuery - 手风琴列表》
  4. collection集合整体结构图
  5. Python基本语法_变量作用域LEGB
  6. mysql 5.5 安装教程
  7. 中国MOOC_零基础学Java语言_第7周 函数_2完数
  8. oracle-参数文件的备份与还原
  9. Linux安装MySql5.7及配置(yum安装)
  10. Struts2基本流程