Spring Mvc controller单元测试
来源:互联网 发布:js中的element 编辑:程序博客网 时间:2024/06/06 00:19
弄了一下午的controller测试类,(主要还是不理解)~~~~~
现在把我测试通过的步骤保存下来,为需要的人一份借鉴
SpringMVC controller测试较简单,从功能角度划分,可分为两种。一种是调用请求路径测试,另一种是直接调用Controller方法测试。(我这是属于前者)
注解:
- RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test组件进行单元测试;
- WebAppConfiguration: 使用这个Annotate会在跑单元测试的时候真实的启一个web服务,然后开始调用Controller的Rest API,待单元测试跑完之后再将web服务停掉;
- ContextConfiguration: 指定Bean的配置文件信息,可以有多种方式,这个例子使用的是文件路径形式,如果有多个配置文件,可以将括号中的信息配置为一个字符串数组来表示;
1、首先开发一个基类,用于载入配置文件。以下所有的测试实现类都要继承这个类
package com.xx.xx.common;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.transaction.TransactionConfiguration;import org.springframework.test.context.web.WebAppConfiguration;import org.springframework.transaction.annotation.Transactional;/** * Created by xx on 2017/11/13. */@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration(locations= {"classpath:spring-mvc.xml","classpath:spring-context.xml"})@TransactionConfiguration(defaultRollback = true)@Transactional(rollbackFor = Exception.class)public class TestBase {}
2、接下来的测试的类TbsysUserControllerTest一定要继承上面的基类
package com.xx.xx.controller;import com.xx.xx.api.TbsysUserController;import com.xx.xx.common.TestBase;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.MvcResult;import org.springframework.test.web.servlet.ResultActions;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.setup.MockMvcBuilders;/** * Created by xieyuzhi on 2017/11/30. */public class TbsysUsercControllerTest extends TestBase { @Autowired TbsysUserController tbsysUserController; /** * MockMvc是SpringMVC提供的Controller测试类,每次进行单元测试时,都是预先执行@Before中的setup方法,初始tbsysUserController单元测试环境。 MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用, 这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。 */ MockMvc mockMvc; @Before public void setup(){ /*** 注意:一定要把待测试的Controller实例进行*/ mockMvc= MockMvcBuilders.standaloneSetup(tbsysUserController).build(); } @After public void after() throws Exception { } //调用请求路径 @Test public void Ctest() throws Exception{ //第一种方法 ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/user/getdata").param("username", "xyz").param("pwd", "eHl6")); MvcResult mvcResult = resultActions.andReturn(); //获取状态码 System.out.println(mvcResult.getResponse().getStatus()); String result = mvcResult.getResponse().getContentAsString(); System.out.println("=====后台代码返回的数据:" + result); //第二种方法// mockMvc.perform((post("/user/getdata")// .param("username", "xyz").param("pwd", "eHl6")))// .andExpect(status().isOk())// .andDo(print()); }}
3、展示一下我的被测试的controller
注意,如果这样复制到你的代码里面运行会报错:
1、解决错误: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
将下面的放到了我的pom.xml里面了(解决heribnate的保存日志和java本身自带的报日志的不兼容问题)
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.5</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- <scope>provided</scope>
- </dependency>
我采用的是Spring Mvc 所以上面的两个jar包都采用pom.xml的形式进行添加
2、可能会报错为空指针的问题
java.lang.NullPointerException 空指针异常问题
我的按照这个走的就是总是报错tbsysUserController为null;
在网上搜了好多网页,废了好长时间,发现是我的映射路径错了;
1、可能是选择的是post方法,结果在controller的@RequestMapping里面讲获取的方式写成了get,我就把它两种方式都写上了,看截图标的3的地方
2、我截的图画了三个框,1和2代表类和方法的映射路径,这个必须要写,我一开始只写了方法的路径/getdata,结果还是报空指针的错,然后我就把类的映射路径也加上了
总结:网上关于这类的博客有很多,就是在一些小细节方面可能自己刚入门还不是很懂,所以就理解的不是很到位,很多东西需要自己多撞撞墙就知道了,相信有很多和我一样的人
- Spring MVC Controller 单元测试
- Spring Mvc controller单元测试
- Controller 使用RestTemplate进行单元测试 spring mvc
- spring MVC mock类单元测试(controller)
- spring MVC controller 的单元测试 第一部分:配置
- 使用Mock 对spring mvc 的controller层进行单元测试
- Spring-Controller单元测试
- Spring-Controller单元测试
- spring MVC -controller
- spring mvc的Controller
- Spring MVC Controller
- Spring MVC中的Controller
- spring mvc controller
- spring MVC controller 跳转
- Spring MVC-Controller
- spring mvc controller
- Spring MVC 中的 Controller
- Spring MVC HelloWorld-Controller
- 数字图像基本操作及灰度调整
- 标准模板库 STL-2 编程题#6: priority queue(Coursera 程序设计与算法 专项课程3;容器中自定义排序顺序 MyCompare,判断质数)
- hdu 1532 Drainage Ditches 和hdu 3549 Flow Problem 网络流入门(EK和dinic)
- From Java To Kotlin
- new,operator new,placement new
- Spring Mvc controller单元测试
- 文章标题
- SQL Server with as使用
- 源码编译同时生成odex和apk文件的坑
- 有道词典
- Unity小技巧-清除缓存
- Spring4和Hibernate4整合后事务不起作用
- 7.7用穷举法求最大约数(1)
- 欢迎使用CSDN-markdown编辑器