在springMVC中的controller写单元测试

springMVC Controller基本测试配置 pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/mav 阅读详情

给controller写单元测试的方法有主要有两种

方法一:

依赖service以及dao层,通过内存数据库H2或者dbUnit做假数据库,insert假数据到内存中

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public abstract class ControllerTestCase extends TestCase {

protected MockMvc mockMvc;

 @Before
 public void setUp() throws Exception {
  mockMvc = MockMvcBuilders.standaloneSetup(getController()).build();
 }

@Test
 public void testSave() throws Exception {
  ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.put("/test/save.do")
    .accept(MediaType.APPLICATION_JSON).param("id", "1000").param("name", "test"));
  MvcResult mvcResult = resultActions.andReturn();
  ModelAndView modelAndView = mvcResult.getModelAndView();
  System.out.println(modelAndView.getViewName());
  assertEquals("redirect:null", modelAndView.getViewName());
 }

}

方法二:

这种方法是基于mock,用mockito创建mock对象,解决controller对其他类的依赖问题,我倾向于用这种方法,因为这种方法,脱离了类之间的依赖关系,实现了真正意义上的组件的单元测试。同时我也避免了写数据库sql到内存等一些了啰嗦的问题。

demo如下:

public class CreativeTemplateControllerTest extends TestCase{
 
 private CreativeTemplateController creativeTemplateController;
 private CreativeTemplateService mockCreativeTemplateService;
 @Before
 public void setUp() throws Exception {
  creativeTemplateController = new CreativeTemplateController();
  mockCreativeTemplateService= mock(CreativeTemplateService.class);
  creativeTemplateController.setCreativeTemplateService(mockCreativeTemplateService);
 }

 @Test
 public void testSave() {
  MockHttpServletRequest request = new MockHttpServletRequest("POST", "/save.do");
  request.addParameter("url", "index?pageNo=20");
  request.setSession(new MockHttpSession(null));
  HttpServletResponse response = new MockHttpServletResponse();
  CrtTemplate crtTemplate = new CrtTemplate();
  crtTemplate.setId(1L);
  crtTemplate.setName("test");
  try {
   String result = creativeTemplateController.save(request, response, crtTemplate);
   assertEquals("redirect:index?pageNo=20", result);
   verify(mockCreativeTemplateService).saveCrtTemplate(crtTemplate);
  } catch (UnsupportedEncodingException e) {
   fail();
  }
 }

}

这种方法还可能会用到spring的一些mock类:

MockHttpServletRequest—几乎每个单元测试中都要使用这个类,它是J2EE Web应用程序最常用的接口HttpServletRequest的mock实现。

MockHttpServletResponse—此对象用于HttpServletResponse接口的mock实现。

MockHttpSession—这是另外一个经常使用的mock对象(后文将讨论此类在会话绑定处理中的应用)。

DelegatingServletInputStream—这个对象用于ServletInputStream接口的mock实现。

DelegatingServletOutputStream—这个对象将代理ServletOutputStream实现。在需要拦截和分析写向一个输出流的内容时,你可以使用它。

总之,在实现你自己的测试控制器时,上面这些对象是最为有用的。然而,Spring也提供了下列相应于其它不太常用的组件的mock实现(如果你是一个底层API开发者,那么你可能会找到其各自的相应用法):

MockExpressionEvaluator—这个mock对象主要应用于你想开发并测试你自己的基于JSTL的标签库时。

MockFilterConfig—这是FilterConfig接口的一个mock实现。

MockPageContext—这是JSP PageContext接口的一个mock实现。你会发现这个对象的使用有利于测试预编译的JSP。

MockRequestDispatcher—RequestDispatcher接口的一个mock实现,你主要在其它mock对象内使用它。

MockServletConfig—这是ServletConfig接口的一个mock实现。在单元测试某种Web组件(例如Struts框架所提供的Web组件)时,要求你设置由MockServletContext所实现的 ServletConfig和ServletContext接口。

那么,我们该如何使用这些mock对象呢?我们知道,HttpServletRequest 是一个持有描述HTTP参数的固定值的组件,而正是这些参数驱动Web组件的功能。MockHttpServletRequest,作为 HttpServletRequest接口的一个实现,允许你设置这些不可改变的参数。在典型的Web组件测试情形下,你可以实例化这个对象并按如下方式设置其中的任何参数:

//指定表单方法和表单行为

MockHttpServletRequest request = new MockHttpServletRequest("GET", "/main.app");

request.addParameter("choice", expanded);request.addParameter("contextMenu", "left");

同样地,你可以实例化并全面地控制和分析HttpResponse和HttpSession对象。接下来,让我们简要观察Spring所提供的特定的JUnit框架扩展。

 

Spring-Controller单元测试 一般测试驱动开发项目中,我们会在Maven中建立一个项目文件和一个一一对应的测试项目文件。每写好一个模块,先对其进行单元测试,再集成到现有的系统中。 针对Controller、Service、Dao三层架构来说,我们最常对Service和Dao进行单元测试。然而Controller的测试,很多人还是启动Tomcat,进行接口测试,这样不紧需要等待很长的编译部署时间而且无法逐个Controller 阅读详情

相关推荐

SpringMVC : Controller层单元测试Mock

代码 @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { "classpath:applicationContext.xml", "file:src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml" }...

uj 1333

对Controller的单元测试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33964094的博客 1051

springMVC中controller层单元测试例子及注意事项

4.x版本的spring控制层单元测试,推荐使用集成web环境的mock,即mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();这种方式更贴近真实情况,完整例子如下:import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.j...

went_m的专栏 1908

单元测试实战(一)Controller 的测试

可立即实施的研发管理赋能措施。

io 5672

springmvc中aop对controller切面编程

概述:最近在开发一个基础应用服务系统,利用加密的token标识来校验访问者的身份。几乎每一个接口都需要校验token。故打算采用aop面向切面编程,一次性对所有接口进行身份认证;遇见的问题:切面配置没有问题的情况下,junit单元测试调用controller里面的方法,可以触发切点,实现切面编程。但是web部署到tomcat后,直接url访问触发切点失败! [Java]纯文本查看复制代码 ? 01 02 03 04 05 06 07 ..

黑马程序员广州中心的专栏 548

Springboot @Test 给Controller接口 写 单元测试

Springboot @Test 给Controller接口 写 单元测试

默默不代表沉默 1万+

如何对Spring MVC中的Controller进行单元测试

对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。 具体来讲,是由Spring框架中的spring-test模块提供的实现,详见MockMvc。 如下将详细阐述如何使用MockMvc测试框架实现对“Spring Controller”进行单元测试,基于Spring Boot开发框架进行验证。 添加测试框架依赖: <!-- Spring框架 --...

HongYu012的博客 4569

unity 腾讯地图sdk移动和缩放代码

unity 腾讯地图sdk 实现移动端 缩放 和 移动

。。。。。 1283

SpringMvc Controller单元测试

注意点 ContextConfiguration 读取配置文件:application.xml 与 spring-servlet.xml 2个文件都是需要进行读取的,而且其路径也不一样:@ContextConfiguration(locations = {"classpath:/applicationContext.xml", "file:src/main/webapp/WEB-INF/spri...

zuozhiyoulaisam的专栏 667

图形学基础|基于SDF的卡通阴影图

图形学基础|基于SDF的卡通阴影图 文章目录图形学基础|基于SDF的卡通阴影图一、前言二、SDF(Signed Distance Field)三、阴影图生成3.1 SDF生成3.2 插值参考博文 一、前言 回顾之前做的卡通渲染,角色面部阴影是靠一张阴影贴图实现的。 为了更好地控制角色的脸部阴影,通过计算脸部朝向与光照方向的夹角和一张单色的FaceMap来判断。 FaceMap的每个像素表示:该像素判断为阴影时候需要达到的夹角。 例如: 当方向光正对角色的时候,夹角为0°,对应的值为0,此时,FaceMap

【黑键】 1万+

游戏开发中的AI与RAG技术应用实践

检索增强生成(RAG)技术是当前AI领域的重要突破,它通过结合信息检索与文本生成能力,显著提升了大型语言模型在专业领域的实用性。其核心原理是建立动态知识库,在生成响应前先检索相关专业资料作为上下文。这种技术特别适合解决游戏开发中的复杂问题,如虚幻引擎API查询、角色背景生成等技术场景。在实际工程应用中,RAG系统需要精心设计分层检索策略、缓存机制和硬件加速方案。通过将RAG深度集成到游戏引擎工作流中,开发者可以快速解决技术难题,新成员也能更快掌握引擎特性,大幅提升团队协作效率。

weixin_29323977的博客 533

SpringMVC工程Controller、Service单元测试代码

applicationContext.xml 为spring配置文件 spring-mvc.xml 为springmvc配置文件 junit4 单元测试代码 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework....

爱码少年 00fly.online 的博客 2万+

从三个角度理解知识图谱

2012年谷歌首次提出“知识图谱”这个词,由此知识图谱在工业界也出现得越来越多,对于知识图谱以及相关概念的理解确实也是比较绕。自己在研究大数据独角兽Palantir之后开始接触知识图谱,也算对其有了一定了解,这里从三个角度总结一下怎么去理解知识图谱。 几个基本概念:本体、实体、知识库、知识图谱 1、本体是概念的集合,是大家都公认的概念框架,一般不会改变如“人”、“事”、“物”、 “地”、“组...

JavaChaoCo的博客 6901

如何为 SpringMVC 编写单元测试:普通 Controller 测试(转)

前一篇文章我们已经知道如何配置使用了 SpringMVC 测试框架的单元测试。 现在我们就该亲身实践下如何为普通 Controller 编写单元测试了。 接下来一个很明显的问题就是: 什么是普通 Controller 其实,就这篇文章来说普通 Controller 就是指负责渲染界面或处理请求的 Controller。 如果你没读过前面的配置篇,那么我建议你先读一下。 使用 ...

weixin_30929195的博客 89

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1764

DeepSeek跨会话协作指南:让AI成为你的「第二大脑」

通过DeepSeek的跨会话协作系统,用户实测工作效率提升63%。

紫夜若涵的博客 1473

如何为 SpringMVC 编写单元测试:普通 Controller 测试

前一篇文章我们已经知道如何配置使用了 SpringMVC 测试框架的单元测试。现在我们就该亲身实践下如何为普通 Controller 编写单元测试了。接下来一个很明显的问题就是:什么是普通 Controller其实,就这篇文章来说普通 Controller 就是指负责渲染界面或处理请求的 Controller。如果你没读过前面的配置篇,那么我建议你先读一下。使用 Maven 获取必须依赖我们可以通过

来啊 快活啊 1万+

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

SpringMVC + JUnit4 单元测试 - Controller 测试

SpringMVC + JUnit4 单元测试依赖普通测试Controller 测试创建 Controller 测试基类创建 Controller 单元测试类总结 依赖 只展示单元测试相关的部分 ssm/pom.xml <properties> <junit.version>4.12</junit.version> <spring.versi......

灵台方寸山斜月三星洞 5905

deepstream车道线检测自定义插件化,其中要注意pipeline的配置,如果插件位置配置不对,会报input format should be RGBA when using blur-obje

以上代码中,我们先从对象池中获取一个 DsUserMeta 对象,然后使用 get_lane_line_from_frame 函数获取车道线检测结果,并使用 add_lane_line_meta 函数将其添加到 DsUserMeta 对象中。注意,上述代码中的 get_lane_line_from_frame 函数和 add_lane_line_meta 函数需要你自己实现,用于从视频帧中提取车道线检测结果,并将其添加到 DsUserMeta 中。

pvmsmfchcs的博客 690

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring mvc 之Junit 单元测试 Controller中方法

Springmvc 之Junit 单元测试 1.   首先引入测试的jar包。 1.1因为我用的ide是eclipse,现只介绍eclipse中junit的使用。首先引用eclipse中自带的junit, 方法: 右键项目—>property---->如下图所示   1.2     因为是要测试junit对springmvc中Controller的单元测试,故要引入Spring

hanzl1的博客 4万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Controller层 - SpringMVC框架

摘要:本文介绍了SpringMVC框架的基本概念和使用方法。SpringMVC是基于MVC设计模型的轻量级Web框架,包含Model(数据模型)、View(视图展示)和Controller(控制器)三部分。通过一个入门案例演示了具体实现步骤:1)创建Maven项目并导入依赖;2)编写JSP页面;3)创建Controller类并使用@RequestMapping注解;4)配置前端控制器DispatcherServlet;5)编写SpringMVC配置文件。案例展示了请求处理流程和视图解析器的配置方法。

m0_64928156的博客 1428

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java springmvc 利用junit4和mockMvc对controller层进行单元测试

利用junit4和mockMvc进行springMVC的controller的接口单元测试 一、概述 自从用了springMVC后,对于service层和dao层的测试,已经很熟悉了,但是对于controller层,要知道controller层的逻辑是否正确,就必须启动服务,但是这样稍微有点改动,就必须启动服务,十分麻烦。还好,spring提供了mockMvc模块,可以模拟web请求来对con

北北的博客 9912

简单使用SpringMVC单元测试

本文主要介绍springMVC单元测试,主要针对controller层、service层以及mapper层。 为什么说单元测试很重要,因为它直接说明你代码质量过不过关。 新建springboot项目, pom.xml <dependency> <groupId>org.springframework.boot</groupId...

qq_37951410的博客 978

Juit4整合SpringMVC,单元测试Controller

1.说明:本文采用的Springboot的开发环境。一般对Service、DAO层的Juit的测试,相对简单,仅针对controller做探讨。2.测试@ResponseBody,针对controller只放回数据进行测试@RunWith(SpringRunner.class) @SpringBootTest public class MybatisApplicationTests { @Au...

shenbug的博客 899

单元测试SpringMVC带文件上传的controller

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/mourJava/article/details/70240166 &lt;/div&gt; &lt;link rel="stylesheet" ...

hehyyoulan的博客 1693
上一篇: 在Git中如何使用类似SVN中的revert功能恢复一个changed file
下一篇: java中final修饰的局部变量
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值