文档章节

对Controller的单元测试

zhixin9001
 zhixin9001
发布于 2017/06/04 22:17
字数 475
阅读 41
收藏 0

在ASP.NET MVC项目的Controller中存在逻辑代码,也需要单元测试。查阅到的资料上,有说ASP.NET MVC框架在设计时便考虑到了满足可测试性,所以相对aspx、Winform来说针对MVC的单元测试要更容易。

 

一 基本使用

原来对Controller的单元测试的并不像此前自己想的那么复杂,本质还是对一个代码单元的功能测试。如果不涉及HttpContext的模拟,使用方法基本与之前对Service层的单元测试方法一致,但会多了一些Arrange操作,因为Controller又会调用Service。测试Login的Post动作在验证码错误时的行为的测试代码为:

 

主要是在刚开始的时候不知道TempData如何设置,原来可以直接这样:auController.TempData[Consts.VERIFY_CODE_KEY] = "VerifyCode_Error",TempData是ControllerBase的属性,而Controller都继承自ControllerBase。

但Session却不能用类似的方法赋值,否则会报空引用错误,Session是只读属性,而且Session应该不在Controller的生命周期内,到底具体怎么做还不知道。

 

 

 

二 模拟HttpContext和HttpRequest

对于单元测试来说,网络与数据库一样都是外部依赖,之前只模拟过数据库,现在可以用类似的方式模拟网络请求了。比如Controller的一个Action需要读取网络请求中的QueryString:

 

 

用Substitute.For方法分别模拟了HttpContextBase和HttpRequestBase对象。通过这儿还学到NSubstitute也是能模拟属性的返回值的,与指定方法的返回值时类似:httpRequest.QueryString.Returns(queryString)。

在这段代码中,也可以大概了解ASP.NET MVC中相关对象之间的关系:Controller->ControllerContext->HttpContext->HttpRequest,前者依次包含后者。

代码var result = auController.Index() as ViewResult将Index返回的ActionResult转换为其子类ViewResult,可以针对ViewResult验证Model、ViewBag、ViewData等数据。

 

© 著作权归作者所有

共有 人打赏支持
zhixin9001
粉丝 6
博文 100
码字总数 80837
作品 0
西安
私信 提问
Spring MVC Controller 单元测试

简介 Controller层的单元测试可以使得应用的可靠性得到提升,虽然这使得开发的时间有所增加,有得必失,这里我认为得到的比失去的多很多。 Sping MVC3.2版本之后的单元测试方法有所变化,随着...

刘-冬-冬
2014/09/09
0
6
测试 Controllers

测试目的 测试controller是否被正确执行 测试所有的 $scope 成员变量被正确设置 在单元测试中使用 mock 抓取 XHR 请求。 ---------- 测试 controller 需要知道,通过 controller 的 scope 会...

开源中国匿名会员
2014/06/10
0
0
Java单元测试编码规范

包结构规范 单元测试包结构和源码结构必须保持一致,如下图所示: 文件命名规范 单元测试文件名字是由“被测试文件名 + Test”组成,如下图所示 代码编写规范 基础单元测试类 被各个单元测试...

紫川帝林
03/08
1
0
基于springboot创建RESTful风格接口

基于springboot创建RESTful风格接口 RESTful API风格 特点: URL描述资源 使用HTTP方法描述行为。使用HTTP状态码来表示不同的结果 使用json交互数据 RESTful只是一种风格,并不是强制的标准 ...

JS_HCX
04/27
0
0
如何在 AngularJS 中对控制器进行单元测试

开发者们都一致认为单元测试在开发项目中十分有好处。它们帮助你保证代码的质量,从而确保更稳定的研发,即使需要重构时也更有信心。 测试驱动开发流程图 AngularJS的代码声称其较高的可测性...

oschina
2013/12/16
8.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

ElasticJob自定义注解注册任务

一,我们需要自定义个注解 @Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface ElasticSimpleJob { @AliasFor("cron") public abstract Str......

满风
18分钟前
1
0
架构师必备,带你弄清混乱的JAVA日志体系

引言 还在为弄不清 commons-logging-xx.jar 、 log4j-xx.jar 、 sl4j-api-xx.jar 等日志框架之间复杂的关系而感到烦恼吗? 还在为如何统一系统的日志输出而感到不知所措嘛? 您是否依然存在这...

微笑向暖wx
19分钟前
1
0
Excel快速入门教程1-简介

什么是Microsoft Excel? Microsoft Excel是一个电子表格程序,用于记录和分析数值数据。 Excel将电子表格视为列和行表的集合。 字母标签通常分配给列,而数字标签通常分配给行。 列和行相交...

python测试开发人工智能安全
20分钟前
1
0
设计模式

设计模式 菜鸟教程

qwergkp
21分钟前
1
0
只需五分钟-用Maven快速搭建Spring Cloud微服务

Maven安装手册 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Jav...

编程SHA
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部