(二)NUnit单元测试心得
现在接着上次说到的内容,如何在项目中进行单元测试。由于做了一些调整,我上次发的内容,我这次也会重新发一次,请认真看看。
一、软件开发过程中存在的问题(没有使用单元测试的情况下)
- 难于定位bug的位置
- 修改一个bug,容易引进n个bug
- bug越后期发现,修改越困难
- 后期系统的复杂性,导致难于修改和重构代码
- 开发人员常认为编译通过,进行了几次手工测试就等于测试通过
- 在完全依赖外部系统的情况下,无法进行有效的测试
- 手工测试效率地下,针对性不强
- 代码难以维护和复用
- 开发人员觉得测试和修改是额外的工作,认为代码通过编译和调试就完成任务
二、单元测试在开发过程中起到的作用
- 单元测试大大节约了测试和修改的时间
- 单元测试能快速定位bug
- 单元测试能使开发人员重新审视需求和功能的设计
- 单元测试强迫开发者以调用者而不是实现者的角度来设计代码,利于代码之间的解耦
- 自动化的单元测试能保证回归测试的有效执行
- 有效且便于测试各种情况
- 使代码可以放心修改和重构
- 单元测试可用作被测代码的用法说明,可作为开发文档使用
- 测试用例永久保存,支持随时测试
以下举一个本人项目的例子,这个被测方法是验证登陆用户是否为管理员或版主
例子:public bool IsAdminOrBoardMaster(IOnLineUser p_OnLineUser)
{
if (!IsRegularUser(p_OnLineUser))//判断是否为有效用户
return false;
if (p_OnLineUser.UserType == UserType.Teacher)//判断是否为教师
{
if (IsHeadmanForUser(p_OnLineUser.UserIdentity))//判断是否为教师组组长
return true;
else
return IsCourseClassBoardMasterForUser(p_OnLineUser.UserId);//判断是否为课程班带教老师
}
else if (p_OnLineUser.UserType == UserType.Student)//判断是否为班长
return p_OnLineUser.UserIdentity == ;//身份为1的话,用户为班长,返回true
else
return true;//管理员
}
- 用户为无效用户,返回false
- 用户有效,类型为管理员,返回true
- 用户有效,类型为学生且为班长,返回true
- 用户有效,但为普通学生,返回false
- 用户有效,类型为教师且为组长,返回true
- 用户有效,类型为教师且为课程班带教老师,返回true
- 用户有效,但为普通教师,返回false
根据上面的测试用例,运行单元测试,NUnit运行如下图
测试用例全部通过,现在我修改一下生产代码,令运行失败,如下图
单元测试可以好清楚地显示哪个方法,哪个参数报错了,出错原因在右面。本人通过这两个例子为了显示一下单元测试在我们实际开发中的其中一个功能,快速定位bug。下面将开始讲解如何在实际项目中应用单元测试。
三、如何在实际项目中应用单元测试(.Net项目为例)
- 桩对象,是对系统中现有外部依赖的一个替代品,可人为控制
- 模拟对象,模仿外部依赖,属于一个伪对象,用于检验交互行为
- 隔离框架
- [TestFixture],用于标识一个包含NUnit自动化测试的类
- [TestCase],用于标识测试方法为一个参数化测试
- [ExpectedException],用于标识被测试方法应该抛出异常
- [Test],用于标识一个需要被调用的自动化测试
- [SetUp],会在测试类中的每个测试运行之前执行
- [TearDown],会在测试类中的每个测试运行之后执行
- [TestFixtureSetUp],会在测试类中的所有测试运行之前执行
- [TestFixtureTearDown],会在测试类中的所有测试运行之后执行
- Assert.IsTure(),用于验证结果是否为true
- Assert.IsFalse(),用于验证结果是否为false
- Assert.AreEqual(),用于验证期望的对象是否与实际一样
- Assert.AreSame (),用于验证两个参数引用是否为同一个对象
- 抽取接口,以允许替换底层实现
- 在被测类中注入中注入伪对象的实现
- 构造函数注入
- 属性注入
- 方法参数(参数注入)
- 工厂类注入
- 局部工厂方法注入(不讲)
- 抽取和重写注入
(二)NUnit单元测试心得的更多相关文章
- (一)NUnit单元测试心得
由于各种缘由,一本<.Net单元测试艺术>突然出现在了我的办公桌上,于是我的单元测试之路就此开始.通过一两个月不间断的学习,以及不断结合具体的项目做开发,再结合书上的知识对单元测试有了一些 ...
- NUnit单元测试资料汇总
NUnit单元测试资料汇总 从安装到配置 首先到官网http://www.nunit.org/下载如下图的资料,安装NUnit-2.6.1.msi包. 然后挂在VS2010外部工具这个地方来使用,工具 ...
- Nunit单元测试入门学习随笔(一)
Nunit单元测试 一.插件安装与项目关联 选择工具~扩展和更新 点击联机~搜索Nunit安装图内三个插件 新建单元测试项目 勾选项目引用 二.Nunit学习 1.了解单元测试 单元测试在我的理解是测 ...
- C# ~ NUnit单元测试
单元测试 单元测试(Unit Test)的一个测试用例(Test Case)是一小段代码,用于测试一个小的程序功能的行为是否正常,保证开发的功能子项能正确完成并实现其基本功能.一个单元测试是用于判断某 ...
- NUnit单元测试
单元测试对程序员来说是非常重要的一门技术,但是在实际编程中却往往被程序员所忽视.微软的VS开发工具为我们提供了强大的单元测试环境,在VS当中可以直接对类库项目进行测试,极大的方便了程序员的自我纠错能力 ...
- Visual Studio 单元测试之二---顺序单元测试
原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...
- nunit单元测试详解
在粗略看了代码后,下面就详细说明相应的测试标记(属性)的用法. [TestFixture(arguments)]属性标记类为测试类,若没有填写参数,则测试类必须含有无参构造函数,否则需要相应的有参构造 ...
- Spring Boot(十二)单元测试JUnit
一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测 ...
- NUnit单元测试示例
单元测试的用法 1.下载NUnit软件 安装后打开界面如图: 2.新建测试项目 添加类库项目并在NuGet管理包中添加NUnit 这里添加NuGet的NUnit包要注意保持版本和之前下载的NUnit软 ...
随机推荐
- python学习笔记27(python中sys模块的使用)
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules.keys() 返回所有已经导入的模块列表 sys.exc_info() 获取当前正在 ...
- hdu 4706 Children's Day(模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=4706 [题目大意]: 用a-z排出N的形状,输出大小为3-10的N,如果超过z之后,重新从a开始 下面是大小为3 ...
- PHP发送微信模版消息
public function payResult($params) { global $_GPC, $_W; $weid = $this->_weid; $order = pdo_fetch( ...
- select count(*)和select count(1)的区别 (转)
A 一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键 ...
- js获取节点
demo1: <!-- <div id="test" v="1">你好</div> --> // console.log(t ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- 【图说】Eclipse与Unity 3D协同工作
原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也 ...
- 如何使用 APM 搞定 PHP 应用的性能优化?
APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...
- VC 最爱问的问题:你这个创业项目,如果腾讯跟进了,而且几乎是产品上完全复制,你会怎么办?
VC 最爱问的问题:你这个创业项目,如果腾讯跟进了,而且几乎是产品上完全复制,你会怎么办? http://www.zhihu.com/question/19607233 朱继玉,独立精神,自由思想. ...
- Android EditText中插入图片并响应点击事件
EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...