转--使用NUnit在.Net编程中进行单元测试
原文地址:http://www.microsoft.com/china/community/Column/59.mspx
1.什么是单元测试:
在程序设计过程中会有许多种测试,单元只是 其中的一种,单元测试并不能保证程序是完美无缺的,但是在所有的测试中,单元测试是第一个环节,也是最重要的一个环节。单元测试是一种由程序员自行测试的 工作。简单点说,单元测试就是测试代码撰写者依据其所设想的方式执行是否产生了预期的结果。关于单元测试的重要性已经有许多文章做了很多深入的分析,这里 就不再赘述。
NUnit是一个为Net准备的自动化单元测试框架,它的作用就是帮助你方便的完成单元测试工作,同鼎鼎有名的JUnit一样,都是xUnit家族的成员。它的下载地址是:http://www.nunit.org。
2.测试先行:按照极限编程(XP)的理论,写测试就是对软件进行设计的过程,它的重要性甚至超过了实际完成功能的代码。先将测试写完,然后再来完成代码,这样,所有的测试通过之日也就是程序完成之时。
首先,我们将NUnit提供的nunit.framework.dll文件引入到工程中,并创建一个名为TicketTest的类:
[TestFixture]
public class TicketTest
{
[Test]
public void Add()
{
Ticket ticket = new Ticket();
ticket.Add(100);
Assertion.AssertEquals(100, ticket.Amount);
}
}
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。
3.根据要求,我们写了如下代码:
public class Ticket
{
private int amount;
public int Amount
{
get
{
return amount;
}
}
public void Add(int num)
{
}
}
{
private int amount;
public int Amount
{
get
{
return amount;
}
}
public void Add(int num)
{
}
}
4.初步测试
注意这段代码只是为了完成类的结构,方法的实现暂时先空着。然后将这段代码编译成一个dll动态连接库文件:UnitTest.dll。
我们运行NUnit的图形测试工具,打开我们编译好的dll文件,点"Run"按纽,就可以看到如下画面(略):
很醒目红色,表示测试并没有成功,不过这个是在我们的预料之中的。
5.完善代码
public void Add(int num)
{
amount += num;
}
{
amount += num;
}
6.保存,重新编译。
切换到NUnit,再点Run,可以看到:
Add方法已经变成绿色了,成功