学习MVC之租房网站(四)-实现Service层并进行单元测试
在上一篇<学习MVC之租房网站(三)-编写Eneity类并创建数据库>中,记录了编写Eneity类并采用CodeFirst的方式创建数据库的过程,接下来就到了Service层的实现了,并且在开始后续工作前,首先进行充分的单元测试。
长久以来,一直为写出很多bug而苦恼,这儿用过单元测试后,惊喜地发现,这不正是保证代码质量的好方法嘛,虽然会耗费额外的时间,但决定以后要把单元测试运用到工作和学习的实践中。
一、实现Service层
1. 为了减少模块、层之间的耦合,在Service层上面增加了IService接口层,一张表对应一个Service类,并对应实现一组IService接口的方法。比如关于后台管理员表T_AdminUser的对应关系为:
T_AdminUser表->AdminUserService->IAdminUserService
IAdminUserService接口中定义的方法有:

然后在AdminUserService类中会一一实现这些方法
2. 配置AutoFac
Service类都在ZSZ.Service项目中,这些Service类都对应实现了ZSZ.IService中的接口。然后会配置使用IOC容器AutoFac,在Global.asax中添加代码:

关于IOC以及AutoFac非常不理解,先用起来,慢慢了解吧,大概的作用就是配置了ZSZ.Service为要使用的Service程序集后,在Controller中直接调用IService就可以了,这样Controller与Service层就解耦了,解耦当然是好事情。
为了有选择性地让AutoFac管理Service,利用一个空的接口IServiceSupport做标识,只有继承了IServiceSupport接口的才会被注入。但对于这儿的IsAssignableFrom需要学学,顺便可以给公众号凑个数,嘿~
二、单元测试
Service都实现后,开始单元测试,VS自带了单元测试的项目模板,并在命名空间Microsoft.VisualStudio.TestTools.UnitTesting下提供了一系列标签,比如[TestClass]、[TestMethod]等,我只用过了这两个。需要对单元测试进行系统的学习,但在最近的实践中,发现了至少是适合自己的单元测试写法,即一个被测试类对应一个单元测试类,一个方法会有多个测试案例,这些Case各编写一个方法,这样便于在VS给出测试结果后快速定位到错误的代码。但每个Case一个方法会造成方法太多,于是用#region包裹一个被测方法相关的所有Case对应的方法。
如对于AdminUserService. GetAll(long? cityId)的测试,想到有如下三个测试案例:

最后,有一种特殊的Assert,Assert.ThrowsException,用于检查是否返回指定的异常类型,写法为:
Assert.ThrowsException<ArgumentException>(() => atService.GetAttachments(2));
注:
课程内容来自如鹏网(www.rupeng.com),专注于大学生就业的在线教育平台;
ASP.NET MVC课程 http://www.rupeng.com/News/9/640.shtml
学习MVC之租房网站(四)-实现Service层并进行单元测试的更多相关文章
- 学习MVC之租房网站(五)-权限、角色、用户管理
在上一篇<学习MVC之租房网站(四)-实现Service层并进行单元测试>中,记录了实现Service层并进行单元测试的过程,接下来该到"正题"-MVC了,也就是UI层 ...
- 学习MVC之租房网站(二)-框架搭建及准备工作
在上一篇<学习MVC之租房网站(一)-项目概况>中,确定了UI+Service的“双层”架构,并据此建立了项目 接下来要编写Common类库.配置AdminWeb和FrontWeb 一.编 ...
- 学习MVC之租房网站(七)-房源管理和配图上传
在上一篇<学习MVC之租房网站(六)-用户登录和权限控制>完成了后台用户登录和权限控制功能的开发,接下来要完成的是房源的管理,用户在后台新增.编辑房源信息,供前台用户操作. 一 房源管理 ...
- 学习MVC之租房网站(八)- 前台注册和登录
在上一篇<学习MVC之租房网站(七)-房源管理和配图上传>完成了在后台新增.编辑房源信息以及上传房源配图的功能.到此后台开发便告一段落了,开始实现前台的功能,也是从用户的登录.注册开始. ...
- 学习MVC之租房网站(三)-编写实体类并创建数据库
在上一篇<学习MVC之租房网站(二)-框架搭建及准备工作>中,搭建好了项目框架,并配置了EF.Log4Net和进程外Session.接下来会编写Eneity类并采用CodeFirst的方式 ...
- 学习MVC之租房网站(六)-用户登录和权限控制
在上一篇<学习MVC之租房网站(五)-权限.角色.用户管理>完成了权限.角色.用户的增删改查,现在将基于前面完成的内容,进行后台用户登录和权限控制功能的开发. 一.用户登录 用户登录涉及到 ...
- 学习MVC之租房网站(九)-房源显示和搜索
在上一篇<学习MVC之租房网站(八)- 前台注册和登录>完成了前台用户的注册.登录.重置密码等功能,然后要实现与业务相关的功能,包括房源的显示.检索等. 一 房源显示 房源显示内容较多,涉 ...
- 学习MVC之租房网站(十)-预约和跟单
在上一篇<学习MVC之租房网站(九)-房源显示和搜索>完成了房源的显示.检索,然后是用户的预约看房,以及后台操作员对预约看房的跟单操作. 预约看房仅有将预约信息保存到对应表的操作,预约表有 ...
- 学习MVC之租房网站(十二)-缓存和静态页面
在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用.发邮件,并将通过UEditor上传的图片保存到云存储.在项目的最后,再学习优化网站性能的一些技术:缓存和 ...
随机推荐
- lxc.conf解析&lxc容器能力
lxd启动容器实际是生成lxc.conf.剩下的就是LXC对容器进行控制了.所以可认为lxc.conf就是lxd和lxc之间主要的接口.lxc.conf详细属性参考: http://manpages. ...
- HTML 5入门知识(三)
<canvas>标签 在网页中使用canvas元素,像使用其他HTML标签一样简单,然后利用JavaScript脚本调用绘图API,绘制各种图形.canvas拥有多种绘制路径.矩形.圆形. ...
- 妙用 `package.json` 快速 `import` 文件(夹)
前言 import router from './router'; import router from '../../router'; import router from './../../../ ...
- 强大的健身软件——Keep
Keep是一款具有社交属性的健身工具类产品.用户可利用碎片化的时间,随时随地选择适合自己的视频健身课程,进行真人同步训练.完成后还可以"打卡"晒成就. 你可根据器械.部位.难度 ...
- 3301: [USACO2011 Feb] Cow Line
3301: [USACO2011 Feb] Cow Line Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 82 Solved: 49[Submit ...
- 3361: [Usaco2004 Jan]培根距离
3361: [Usaco2004 Jan]培根距离 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 16 Solved: 13[Submit][Sta ...
- CoreAnimation 寄宿图
#CoreAnimation 寄宿图 寄宿图:图层中所包含的图 by:旭宝爱吃鱼 针对于寄宿图我在这里只讨论contents属性以及Custom Drawing. contents content:内 ...
- osprofiler在openstack Cinder里的使用
最近在做OpenStack Cinder driver的性能调试, 之前一直是通过在driver里面加入decorator,完成driver各个接口的执行时间的统计. 其实在openstack,已经在 ...
- .NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
序言 Redis中的管道(PipeLine)特性:简述一下就是,Redis如何从客户端一次发送多个命令,服务端到客户端如何一次性响应多个命令. Redis使用的是客户端-服务器模型和请求/响应协议的T ...
- SignalR指定用户推送消息
一.首先,在MVC项目中安装SingalR包(SingalR2.0需要.net4.5以上,VS2010可以安装1.1.3版本,本例为VS2010+SignalR1.1.3). 打开工具-NuGet程序 ...