独霸软件园

独霸软件园:请安心下载,绿色无病毒!

软件提交最近更新热门排行
您现在的位置:首页››编程教学››.NET编程››.NET基础

前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

2005-06-16 01:26作者:佚名来源:本站整理浏览:317 评论:0
使用NUnit在.Net编程中进行单元测试
摘要:

本文通过一个详实的例子,详细介绍了如何在C#中利用NUnit单元测试框架进行应用程序类的单元测试工作。
目录:

  • 引言

  • 什么是单元测试

  • 测试先行

  • 测试异常

  • 总结

引言:

举一个可能会发生在你身边的事件将更能贴近实际,幸好我们现在就有一件在程序员看来非常普通的任务:
你今天第一天上班,你的项目经理拿给你一叠不算厚的文档,告诉你今天的任务是按照文档中的要求编写一个.Net类,可能因为任务并不复杂,所以他看上去非常的随意。
今天能否很好的完成任务对你来说非常特殊,你拿过来后快速略过了前面大段的项目介绍,因为你知道那些对你并不重要,印象中好象是一个关于售票系统的工程。很快,你找了你需要关注的重点:类的需求说明文档。你详细的看了一遍,感觉并不复杂,类名Ticket,有一个只读的int型公共的属性,名称是Amount,还有两个方法,一个是名称是Sell,功能是将Amount减去一,表示卖掉了一张票,当然,票可不能为负数,如果是的话,抛出一个异常说明原因。另一个是Add,它有一个int型的参数,功能是将这个参数的值加到Amount中去,可能是表示进票之类的事情吧,你不太关心,反正这个程序很简单,你掩饰住内心的狂喜,打开电脑,调出编辑器,开始准备写程序了。
"喂,等等",项目经理不知道什么时候又转回来了,"我想知道你打算怎么进行单元测试,我最关心的是这个"。
"什么是单元测试?"你转过头一脸沮丧的看着失望的项目经理。
什么是单元测试:

在程序设计过程中会有许多种测试,单元只是其中的一种,单元测试并不能保证程序是完美无缺的,但是在所有的测试中,单元测试是第一个环节,也是最重要的一个环节。单元测试是一种由程序员自行测试的工作。简单点说,单元测试就是测试代码撰写者依据其所设想的方式执行是否产生了预期的结果。关于单元测试的重要性已经有许多文章做了很多深入的分析,这里就不再赘述。
NUnit是一个为Net准备的自动化单元测试框架,它的作用就是帮助你方便的完成单元测试工作,同鼎鼎有名的JUnit一样,都是xUnit家族的成员。它的下载地址是:http://www.nunit.org。
测试先行:

"什么?先写测试?"你一定非常惊讶,对!就是先来编写测试代码,按照极限编程(XP)的理论,写测试就是对软件进行设计的过程,它的重要性甚至超过了实际完成功能的代码。先将测试写完,然后再来完成代码,这样,所有的测试通过之日也就是程序完成之时。
首先,我们将NUnit提供的要nunit.framework.dll文件引入到工程中,并创建一个名为TicketTest的类:[TestFixture]    public class TicketTest    {\t[Test]\tpublic void Add()\t{\t    Ticket ticket = new Ticket();\t    ticket.Add(100);\t    Assertion.AssertEquals(100, ticket.Amount);\t}    }
注意,其中的[TestFixture]和[Test]两个Attribute为NUnit所规定必须要添加的,这样,测试框架就可以知道哪些类或者方法需要进行测试。
我们在Add方法中定义了一个ticket对象,并给他加了100张票,然后就可以使用:
Assertion.AssertEquals(100, ticket.Amount);
来测试ticket的Amount属性是否确实为100。
接下来,我们再向TicketTest中添加一个测试Sell的方法:[Test]\tpublic void Sell()\t{\t    Ticket ticket = new Ticket();\t    ticket.Add(100);\t    ticket.Sell();\t    ticket.Sell();\t    ticket.Sell();\t    Assertion.AssertEquals(97, ticket.Amount);\t}
这里,我们先加了100张票之后就一口气卖掉了3张,然后看看我们是否还剩下97张票。
好了,这两个方法的测试已经做完了,我们来看一下测试的结果,根据要求,我们写了如下代码:public class Ticket    {\tprivate int amount;\tpublic int Amount\t{\t    get\t    {\t\treturn amount;\t    }\t}\tpublic void Add(int num)\t{\t}\tpublic void Sell()\t{\t}}
注意这段代码只是为了完成类的结构,方法的实现暂时先空着。然后将这段代码编译成一个dll动态连接库文件:UnitTest.dll。
我们运行NUnit的图形测试工具,打开我们编译好的dll文件,点"Run"按纽,就可以看到如下画面:
前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

很醒目红色,表示测试并没有成功,不过这个是在我们的预料之中的。
接下来,我们向刚才的Ticket类中完成我们的Add方法实现代码:
public void Add(int num)
{
amount += num;
}
保存,重新编译。
切换到NUnit,再点Run,可以看到:
前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

Add方法已经变成绿色了,再接着将Sell方法也完成:
public void Sell()
{
amount -= 1;
}
再来测试,结果就变成:
前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

啊,总算变成美丽的绿色了,大家现在体会到环保的重要性了吧。 :)
那么可以交任务了吗?等等,别急,还有个异常没测试呢,如果我们的Amount小于0的话,就会产生异常,那么,异常怎么测试呢?请接着看。
测试异常:

还是跟上面一样,先写出测试代码:[Test]    [ExpectedException(typeof(Exception))]    public void ExcpetionTesting()    {\tTicket ticket = new Ticket();\tticket.Add(3);\tticket.Sell();\tticket.Sell();\tticket.Sell();\tticket.Sell();    }
其中,[ExpectedException(typeof(Exception))]表示我们希望能捕获到发生的异常,如果没有捕获到异常,则表示测试失败。
后面的代码很好理解,我们加了三张票,却卖了四张出去,这可不是炒股,以后没办法平仓的。 :)
编译运行,我们看到以下的测试画面:
前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

在Ticket类中,我们修改一下Sell方法,让它变成:
public void Sell()
{
if(amount - 1 < 0)
throw new Exception("Amount不能为0");
amount -= 1;
}
编译,再测试,结果如下:
前几天和mark_ajian 聊天时谈到了NUnit工具,大家可以看看MS社区的文章了:)(转)

好了,到了这里就算完成我们的单元测试之旅了,大家对如何在C#中进行单元测试一定已经有了一个基本的认识。另外,NUnit并不是只针对C#,事实上,你可以在任何.Net语言中使用NUnit来测试你的单元,方法都一样。
总结:

单元测试看上去虽然有点麻烦,但是它为程序员提供了一个安全的观点,让程序员对自己的程序更加有信心,在减少开发后期进行频繁Debug所耗费时间的同时也为应用软件提供了第一道安全防护网,因此,单元测试是提高开发效率和软件品质的一个重要的手段。
利用UNint,我们可以在.Net编程过程中非常方便的进行单元测试,它图形化的界面和简单而强大的测试框架为我们提供了一个非常舒适而有趣的测试环境,能够让程序员觉得进行单元测试并不枯燥乏味,习惯后甚至还能成为一种乐趣。
看完本文,如果你是引言中那个可怜的程序员的话,你现在就一定能轻松的面对你的项目经理,交上一份令人放心的代码答卷。


作者:
卢彦
Passport: nluyan@msn.com
Tags:责任编辑:cvery
顶一下(60)
92.31%
    1. 手机交友软件手机交友软件

      手机交友软件。如此快节奏的时代,迫于各种因素的限制,真正有时间来交友还是很少的,这样就应运而出手机交友平台,小编带来真实可靠的手机交友软件大全,帮助大家找到另外一个他(她)。...

    1. 陌生人交友陌生人交友app

      独霸软件园陌生人交友app下载专区提供了最全面最好用最新的各种陌生人交友软件,求职包含有南遇见,北陌陌,海外有嘎嘎以及微信等诸多优秀经典的南遇见,北陌陌,海外有嘎嘎以及陌生人交友应用神器下载。...

    文章评论 独霸下载QQ群:① 7551827使用手机微信搜索 微信号:xinyunshouyou 关注我们 有更多惊喜!!

    请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!
      验证码:     登录   注册
    网友评论
    2019免费注册送30元体验金-老虎机开户送8—18礼金-免费注册送59不限id老虎机免费送彩金98-老虎机新用户领取免费彩金-老虎机开户送8—18礼金下载app送62元彩金-下载app送18元彩金金送38-棋牌游戏送88彩金注册就送38无需存款-下载app送38彩金大全-下载app领彩金37棋牌下载app领取38元彩金-下载app送38彩金大全-菠菜论坛网址大全下载app送38彩金大全-app自助领取彩金38论坛-老虎机开户送8—18礼金下载app领彩金37-下载app送62元彩金-电子游戏免费注册送28元下载app领彩金37-免费送彩金的白菜网-免费送彩金棋牌游戏大全一进去就送18块钱的彩金-下载app领彩金37-白菜网送彩金2019不限ip一进去就送18块钱的彩金-下载app领彩金37-白菜网下载app送彩金老虎机注册送20体验金-注册就送38无需存款-下载app领彩金37下载app送18元彩金金送38-无需申请送18元彩金-下载app领彩金37送彩金500的网站大白菜-送彩金200的网站大白菜-下载app送18元彩金金送38白菜送彩金大全_白菜送体验金大全_白菜体验金彩金大全【2019】注册送白菜的所有网站-白菜送彩金网站大全-2019注册送白菜网送彩金500的网站大白菜-送彩金200的网站大白菜-最新免费送彩金论坛自助领取38彩金-送彩金500的网站大白菜-送彩金200的网站大白菜老虎机免费送彩金98-送彩金500的网站大白菜-白菜网免费彩金送48送彩金500的网站大白菜-送彩金200的网站大白菜-电子游戏送38彩金网址送彩金500的网站大白菜-开户即送58体验金不限id-2019免费注册送30元体验金棋牌申请送98元体验金-开户即送58体验金不限id-注册就送38无需存款送彩金500的网站大白菜-棋牌送彩金38-送彩金200的网站大白菜下载app领彩金37-下载app送彩金18-送彩金500的网站大白菜开户即送58体验金不限id-注册自助体验金8一88元-下载app自助领8—88元体检金开户即送58体验金不限id-注册自助体验金8一88元-下载app自助领8—88元体检金免费送彩金-app自助领取彩金38-白菜大全免费送彩金注册送38元体验金不限id-免费注册送88元体验金-欢迎光临送体验金的游戏平台免费送彩金的白菜网-送彩金500的网站大白菜-送彩金200的网站大白菜注册送白菜网论坛网-下载app送18元彩金金送38-无需申请送18元彩金2019最新免费彩金论坛白菜网|2019新会员秒送体验金送彩金500的网站大白菜-送彩金的棋牌娱乐平台-无需申请送18元彩金送彩金500的网站大白菜-老虎机免费送彩金98-无需申请送18元彩金【白菜送彩金网站大全】送彩金200的网站大白菜>>送彩金500的网站大白菜免费领彩金网站-送彩金500的网站大白菜-白菜网免费彩金下载app领彩金37-免费送彩金的白菜网-免费送彩金棋牌游戏大全下载app领彩金37-无需申请送18元彩金-老虎机送免费彩金98送彩金500的网站大白菜-白菜送彩金的平台大全-送彩金200的网站大白菜注册送白菜网论坛网-送彩金500的网站大白菜-2019注册体验金白菜网站送彩金500的网站大白菜-送白菜彩金网站大全-送彩金200的网站大白菜送体验金的棋牌游戏-注册送88元体验金-送体验金的娱乐网站 一进去就送18块钱的彩金-下载app领彩金37-白菜网送彩金2019不限ip无需申请送18元彩金-送彩金500的网站大白菜-老虎机开户送8—18礼金送彩金500的网站大白菜-送白菜彩金网站大全-送彩金200的网站大白菜无需申请送18元彩金-注册就送38无需存款-棋牌游戏送88彩金送彩金500的网站大白菜-下载app送18元彩金金送38-送彩金的棋牌娱乐网站下载app送18元彩金金送38-下载app送88彩金大全-无需申请送18元彩金送彩金的棋牌娱乐网站-送彩金500的网站大白菜-送彩金200的网站大白菜送彩金500的网站大白菜-注册秒送18体验彩金-送彩金200的网站大白菜送彩金500的网站大白菜-app自助领取彩金88-白菜大全自动送彩金