[TestFixture] public class TicketTest { [Test] public void Add() { Ticket ticket = new Ticket(); ticket.Add(100); Assertion.AssertEquals(100, ticket.Amount); } } 注意,其中的[TestFixture]和[Test]两个Attribute为NUnit所规定必须要添加的,这样,测试框架就可以知道哪些类或者方法需要进行测试。 我们在Add方法中定义了一个ticket对象,并给他加了100张票,然后就可以使用: Assertion.AssertEquals(100, ticket.Amount); 来测试ticket的Amount属性是否确实为100。 接下来,我们再向TicketTest中添加一个测试Sell的方法:
[Test] public void Sell() { Ticket ticket = new Ticket(); ticket.Add(100); ticket.Sell(); ticket.Sell(); ticket.Sell(); Assertion.AssertEquals(97, ticket.Amount); } 这里,我们先加了100张票之后就一口气卖掉了3张,然后看看我们是否还剩下97张票。 好了,这两个方法的测试已经做完了,我们来看一下测试的结果,根据要求,我们写了如下代码:
public class Ticket { private int amount; public int Amount { get { return amount; } } public void Add(int num) { } public void Sell() { } } 注意这段代码只是为了完成类的结构,方法的实现暂时先空着。然后将这段代码编译成一个dll动态连接库文件:UnitTest.dll。 我们运行NUnit的图形测试工具,打开我们编译好的dll文件,点"Run"按纽,就可以看到如下画面: 很醒目红色,表示测试并没有成功,不过这个是在我们的预料之中的。 接下来,我们向刚才的Ticket类中完成我们的Add方法实现代码: public void Add(int num) { amount += num; } 保存,重新编译。 切换到NUnit,再点Run,可以看到: Add方法已经变成绿色了,再接着将Sell方法也完成: public void Sell() { amount -= 1; } 再来测试,结果就变成: 啊,总算变成美丽的绿色了,大家现在体会到环保的重要性了吧。 :) 那么可以交任务了吗?等等,别急,还有个异常没测试呢,如果我们的Amount小于0的话,就会产生异常,那么,异常怎么测试呢?请接着看。 测试异常: 还是跟上面一样,先写出测试代码:
[Test] [ExpectedException(typeof(Exception))] public void ExcpetionTesting() { Ticket ticket = new Ticket(); ticket.Add(3); ticket.Sell(); ticket.Sell(); ticket.Sell(); ticket.Sell(); } 其中,[ExpectedException(typeof(Exception))]表示我们希望能捕获到发生的异常,如果没有捕获到异常,则表示测试失败。 后面的代码很好理解,我们加了三张票,却卖了四张出去,这可不是炒股,以后没办法平仓的。 :) 编译运行,我们看到以下的测试画面: 在Ticket类中,我们修改一下Sell方法,让它变成: public void Sell() { if(amount - 1 < 0) throw new Exception("Amount不能为0"); amount -= 1; } 编译,再测试,结果如下: 好了,到了这里就算完成我们的单元测试之旅了,大家对如何在C#中进行单元测试一定已经有了一个基本的认识。另外,NUnit并不是只针对C#,事实上,你可以在任何.Net语言中使用NUnit来测试你的单元,方法都一样。 总结: 单元测试看上去虽然有点麻烦,但是它为程序员提供了一个安全的观点,让程序员对自己的程序更加有信心,在减少开发后期进行频繁Debug所耗费时间的同时也为应用软件提供了第一道安全防护网,因此,单元测试是提高开发效率和软件品质的一个重要的手段。 利用UNint,我们可以在.Net编程过程中非常方便的进行单元测试,它图形化的界面和简单而强大的测试框架为我们提供了一个非常舒适而有趣的测试环境,能够让程序员觉得进行单元测试并不枯燥乏味,习惯后甚至还能成为一种乐趣。 看完本文,如果你是引言中那个可怜的程序员的话,你现在就一定能轻松的面对你的项目经理,交上一份令人放心的代码答卷。
本文地址:http://com.8s8s.com/it/it7813.htm