频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

1.5.4 单元测试

作者: 张领 出处:清华大学出版社  2008-06-27 16:47    砖    好    评论   进入论坛
阅读提示:《ASP.NET项目开发全程实录》第1章供求信息网(ASP.NET 2.0+SQL Server 2005实现),这一章主要讲述如何利用ASP.NET 2.0+SQL Server 2005快速开发一个电子商务平台,本节为大家介绍单元测试。

1.5.4  单元测试

在现代软件开发过程中,测试不再作为一个独立的生命周期。单元测试成为与编写代码同步进行的开发活动。单元测试能够提高程序员对程序的信心,保证程序的质量,加快软件开发速度,使程序易于维护。

1.单元测试概述

单元测试是在软件开发过程中要进行的最低级别的测试活动。在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

在一种传统的结构化编程语言中,如C语言,要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中,要进行测试的基本单元是类。单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。

经常与单元测试联系起来的另外一些开发活动包括代码走读(Code Review),静态分析(Static Analysis)和动态分析(Dynamic Analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪、时间分析,以及测试覆盖度方面的信息。

2.单元测试的优点
 
一种验证行为

程序中的每一项功能都是通过测试来验证它的正确性。它为以后的开发提供支援。就算是开发后期,我们也可以轻松地增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西,而且它为代码的重构提供了保障。这样,我们就可以更自由地对程序进行改进。
 
一种设计行为

编写单元测试将使我们从调用者的角度观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。
 
一种编写文档的行为

单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。
 
具有回归性

自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地地快速运行测试

3.越到项目后期,单元测试为何越难进行

在很多项目的初期,项目中的大部分程序员都能够自觉地去编写单元测试。随着项目的进展、任务的加重,离交付时间越来越近,不能按时完成项目的风险越来越大,单元测试就往往成为牺牲品了。项目经理因为进度的压力也不重视了,程序员也因为编码的压力和无人看管而不再为代码编写单元测试了。笔者亲身经历的项目都或多或少地发生过类似这样的事情。越是在项目的后期,能坚持编写单元测试的程序在整个项目组中所占的项目比例越低。

为了追赶项目进度,多数程序员将没有经过任何测试的程序代码上传到版本控制系统,项目经理也不再追问,照单全收。这样做的结果就是在项目后期,技术骨干人员只好加班加点进行系统集成。集成完了之后,下发给测试人员测试时,Bug的报告数量翻倍增长。程序员开始修改Bug,但还有非常多的Bug隐藏得很深,一直潜伏到生产环境去。

总之,在现代软件开发过程中,测试不再作为一个独立的生命周期,单元测试成为与编写代码同步进行的开发活动。单元测试能够提高程序员对程序的信心,保证程序的质量,加快软件开发速度,使程序易于维护。没有单元测试是绝对不行的。

4.NUnit单元测试工具的介绍与使用

(1)NUnit使用前介绍

NUnit是一个单元测试框架,专门针对测试.NET开发的程序,同类产品还包括JUnit(Java)、CPPUnit(C++),都属于xUnit中的成员。NUnit是xUnit家族中的第4个主打产品,完全由C#语言来编写,目前NUnit的最新版本是NUnit 2.4.3,可以到http://www.nunit.org/网站下载。
下面正式讲解Nunit。在讲解之前先来看一下单元测试的运行效果,如图1.28和图1.29所示。

  
(点击查看大图)图1.28  单元测试通过效果

 
(点击查看大图) 图1.29  单元测试失败效果

在图1.28和图1.29中非常容易发现不同颜色的状态条,图1.28中是绿色的,图1.29中是红色的。如果所有测试案例运行成功,就为绿色;反之,如果有一个不成功,则为红色。

在右边面板的中间,可以看到测试进度条。进度条的颜色反映了测试执行的状态:
 
绿色:描述目前所执行的测试都通过。
 
黄色:意味某些测试忽略,但是这里没有失败。
 
红色:表示有失败。

(2)使用NUnit进行单元测试

下面开始按步骤讲解如何在.NET中使用NUint工具。

①为单元测试代码创建一个Visual Studio 2005类库项目,将其命名为NUNIT,如图1.30所示。

 
(点击查看大图) 图1.30  创建类库

②增加一个NUnit框架引用。在创建NUNIT项目中需要增加一个NUnit.framework.dll引用。首先在菜单栏选择“项目”/“添加引用”命令,弹出“添加引用”对话框,如图1.31所示。然后在安装的NUnit 2.4.3单元测试工具的目录下(安装所在盘:\Program Files\NUnit 2.4.3\bin)找到nunit.framework.dll文件,单击“确定”按钮,即可引用到项目中。

③在创建的类库中,首先引用命名空间NUnit.Framework,然后创建netTest类,并实现TestA方法和TestB方法。其中,TestFixture属性和Test属性,均属于NUnit.Framework的元素,分别用于指定要测试的类和测试的方法。

 
(点击查看大图) 图1.31  添加nunit.framework.dll引用
完整代码如下:
 using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
namespace NUNIT
{
[TestFixture]
public class netTest
{
[Test]
public void TestA()
{
int d, i;
for (i = 0; i < 10; i++)
{
d = i;
}
Assert.AreEqual(10, i);  //判断的预期值是否为10
}
[Test]
public void TestB()
{
int d, i;
for (i = 0; i < 10; i++)
{
d = i;
}
Assert.AreEqual(11, i);  //判断的预期值是否为11
}
}
}

④运行程序,将项目编译成DLL类库。

⑤运行NUnit GUI单元测试工具,打开编译的DLL文件,按F5键,根据进度条中的颜色,即可判断单元测试的成功与失败,如图1.32所示,TestA方法测试成功,TestB方法测试失败。

 
(点击查看大图)图1.32  单元测试结果
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
初探敏捷开发
WCF开发基础
Visual Studio 2005开发基础
测试开发人员参考手册
Groovy开发技术
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
浏览器的战国时代
浏览器的战国时代
ARP攻击防范与解决方案
ARP攻击防范与解决方案
NAC安全访问控制
NAC安全访问控制
· NAC安全访问控制
· 网络布线测试仪器
· Windows Server 2008专..
· Windows远程桌面应用
· 网络故障排除宝典
· 运营商封堵ADSL共享 中..
· 解析35岁技术人的价值..
· 世纪枭雄比尔盖茨的王..
· 主流品牌防火墙配置
· ASP.NET开发教程
· 超级计算机TOP500专题
· Vista SP1对决XP SP3
· SQL Server 2008/2005..
· 程序员如何成长?
· C#技术开发指南
· 虚拟化技术还有点“虚”
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Windows远程桌面应用
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· Windows远程桌面应用
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用