使用NUnit对.NET程序进行单元测试

每一个开发出来的软件,在发布之前,都需要进行测试。因为没有程序员敢保证自己的代码没有BUG。而测试又分为很多种,今天所要介绍的单元测试,属于众多测试手段中的一种。我的观点,单元测试是应该由开发人员在编码过程结束后,所进行的一种自我测试手段,是测试过程的第一步。

单元测试的目的,就是针对要测试的模块或者方法,写一段代码用来测试,看是否达到预期的结果。不同的开发语言,单元测试的工具也不一样。JAVA语言开发系统:目前比较流行的是JUnit;.Net语言开发系统:目前比较流行的是:NUnit;C/C++语言开发系统:目前比较流行的是CPPUnit。

今天要介绍的是NUnit,NUnit的工具,大家可以到www.nunit.org的网站去下载。下载后双击安装,在桌面可以找到一个NUnit的GUI程序快捷方式。NUnit提供GUI和CUI的两种界面。

首先,我们要构建一个被测试的类。在这里,我们假定有一个类 MyClass:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace NUnitTest
{
public class MyClass
{

private int m_Value;
public MyClass()
{
m_Value=0;
}

public void Add(int nAmount)
{
m_Value+=nAmount;
}

public int CurrentValue
{
get{return m_Value;}
}

}
}

类提供一个Add方法和一个CurrentValue的属性。Add方法,用于对成员变量m_Value值进行加法运算。 CurrentValue属性用于获取当前m_Value的值。

在完成这个类之后,我们就需要对这个类进行单元测试了。具体的方法,是建立另外一个类库,在这个工程里面,引用我们的MyClass类所在的程序集。并且在NUnit的安装目录下的bin子目录,添加对NUnit.Framework.dll的引用。我们的测试类构建如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using NUnit.Framework;
using NUnitTest;

namespace NUnitTest
{
[TestFixture]
public class MyClassTest
{
public MyClassTest()
{
}

[Test]
public void TestMethod()
{
MyClass obj=new MyClass();
obj.Add(50);
Assert.AreEqual(50,obj.CurrentValue);
}
}
}

注意,其中的[TestFixture]和[Test]两个Attribute为NUnit所规定必须要添加的,这样,测试框架就可以知道哪些类或者方法需要进行测试。并且根据NUnit在线文档的规定,测试的方法之前,必须加上Test特性。并且改方法必须返回void,还不能带输入参数。

在这个方法种,就是我们针对Add方法的具体测试代码了,代码比较简单,就是调用Add方法,改变m_Value的值为50。然后调用Assert类的静态方法AreEqual进行测试,比较m_Value当前的值是否是我们所预期的值:50。

保存好工程后,编译该测试的程序集。然后打开NUnit GUI程序。加载这个测试的程序集到工具中。选中工程,然后点击右边的Run按钮。如果左边全部变为绿色,表示测试通过。

加入我们将上面的

1
Assert.AreEqual(50,obj.CurrentValue);

改为:

1
Assert.AreEqual(60,obj.CurrentValue);

显然,我们期望的值是60,而实际值并不是60。则测试不会通过,并且会提示:

1
2
3
NUnitTest.MyClassTest.TestMethod :
expected: <60>
but was: <50>

在下面的输出窗口,会提示发生错误的具体的代码位置:

1
at NUnitTest.MyClassTest.TestMethod() in d:\mycode\c# projects\nunittest\myclasstest\myclasstest.cs:line 24

这样,我们能够方便的找到出错的地方,并进行分析和改正。NUnit对单元测试提供了很多的方便,它还提供了很多方便和功能强大的类。具体的用法,大家可以参考NUnit官方网站的在线文档。

支持原创技术分享,据说打赏我的人,都找到了女朋友!