介绍
NUnit是一款用于在.net环境进行单元测试的工具,它的官方网站是:http://www.nunit.org,需要了解历史和下载最新版本的朋友可以去官方网站下载,目前最新版本是2.4.6了,提供msi安装文件和压缩包形式下载,并且支持.net1.1和.net2.0。目前它的最新版本是2.4.6.0。
下载截图
二、开发
NUnit的运行界面
利用NUnit进行开发之前,需要先添加类库引用,如下图:
添加对NUnit.framework.dll的引用
然后编写代码
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
NUnitDemo
{
///
<summary>
///
说明:这是一个类,用于测试。
///
</summary>
public
class
Person
{
private
int
personId;
private
string
name;
private
DateTime birthday;
///
<summary>
///
生日
///
</summary>
public
DateTime Birthday
{
get
{
return
birthday; }
set
{ birthday
=
value; }
}
///
<summary>
///
姓名
///
</summary>
public
string
Name
{
get
{
return
name; }
set
{ name
=
value; }
}
///
<summary>
///
编号
///
</summary>
public
int
PersonId
{
get
{
return
personId; }
set
{ personId
=
value; }
}
}
}
用于测试的类:
using
System;
using
System.Collections.Generic;
using
System.Text;
using
NUnit.Framework;
namespace
NUnitDemo
{
[TestFixture]
///
<summary>
///
说明:这是一个测试类,用来展示NUnit的用法。
///
</summary>
public
class
Test
{
Person p
=
new
Person();
public
Test()
{
}
[Test]
public
void
CheckPersonId()
{
Assert.AreEqual(p.PersonId,
0
);
//
检查对值类型数据未明确赋值之前是不是为0
}
[Test]
public
void
CheckPersonNameNull()
{
Assert.AreEqual(p.Name,
null
);
//
检查对字符串类型数据未明确赋值之前是不是为null
}
[Test]
public
void
CheckPeronBirthday()
{
Assert.AreEqual(p.Birthday, DateTime.MinValue);
//
检查对日期时间类型数据未明确赋值之前是不是为DateTime.MinValue
}
[Test]
public
void
CheckSum()
{
int
i
=
2
, j
=
6
;
int
num
=
2
+
6
;
Assert.AreEqual(num,
9
);
}
[Test]
[Ignore(
"
忽略的原因
"
)]
public
void
CheckClassType()
{
Assert.IsInstanceOfType(
typeof
(
object
), p);
}
}
}
第一次使用NUnit的人可能对上面的代码有些地方感到陌生,因为NUnit通过反射来获取程序中的相关信息,从而得知哪些类中的哪些方法需要进行测试,所以有必要对NUnit的一些常用属性进行了解:
TestFixture属性:用来标识类,表示这个可能包含有用于测试的方法。
Test属性:用来标识方法,表示这个方法需要进行测试(前提是该方法所在的类是可以测试的)。
SetUp属性:用来标识方法,在开始所有测试之前执行,用来在测试前初始化一些资源,比如初始化类。
TearDown属性:用来标识方法,在所有测试完成之后执行,用来释放一些资源。
Ignore属性:用来标识方法,指示这个方法由于某些原因暂时不需要测试(比如没有完成相关代码)。
更多其它属性的介绍请查阅随同下载的文档(位于doc目录下的attributes.html)。另外我们还需要注意的是,用于测试的类必须是public的,最好有一个缺省的构造函数。同时用于测试的方法必须不带任何参数,并且不返回任何参数,同时也必须是public的。
程序代码:
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
NUnitDemo
{
///
<summary>
///
说明:这是一个类,用于测试。
///
</summary>
public
class
Person
{
private
int
personId;
private
string
name;
private
DateTime birthday;
///
<summary>
///
生日
///
</summary>
public
DateTime Birthday
{
get
{
return
birthday; }
set
{ birthday
=
value; }
}
///
<summary>
///
姓名
///
</summary>
public
string
Name
{
get
{
return
name; }
set
{ name
=
value; }
}
///
<summary>
///
编号
///
</summary>
public
int
PersonId
{
get
{
return
personId; }
set
{ personId
=
value; }
}
}
}
测试的相关代码:
using
System;
using
System.Collections.Generic;
using
System.Text;
using
NUnit.Framework;
namespace
NUnitDemo
{
[TestFixture]
///
<summary>
///
</summary>
public
class
Test
{
Person p
=
new
Person();
public
Test()
{
}
[Test]
public
void
CheckPersonId()
{
Assert.AreEqual(p.PersonId,
0
);
//
检查对值类型数据未明确赋值之前是不是为0
}
[Test]
public
void
CheckPersonNameNull()
{
Assert.AreEqual(p.Name,
null
);
//
检查对字符串类型数据未明确赋值之前是不是为null
}
[Test]
public
void
CheckPeronBirthday()
{
Assert.AreEqual(p.Birthday, DateTime.MinValue);
//
检查对日期时间类型数据未明确赋值之前是不是为DateTime.MinValue
}
[Test]
public
void
CheckSum()
{
int
i
=
2
, j
=
6
;
int
num
=
2
+
6
;
Assert.AreEqual(num,
9
);
}
[Test]
[Ignore(
"
忽略的原因
"
)]
public
void
CheckClassType()
{
Assert.IsInstanceOfType(
typeof
(
object
), p);
}
}
}
运行nunit.exe(图形化方式,如果想利用控制台方式请运行nunit-console.exe),通过【File】->【Open Project】方式打开生成的程序文件,然后点【Run】按钮运行测试,测试上面的代码结果如下:
我们可以看到用于测试方法有三种颜色,这三种颜色指示了测试的结果:
绿色:标识测试通过
黄色:标识忽略了测试这个方法
红色:标识测试失败
三、集成到Vs2005中
如果每次测试都要先编译程序,再打开NUnit.exe,找到生成的文件测试,这样太费时也太费事了,下面讲怎么集成到Vs2005中。
首先打开项目属性,如下图:
接着打开【设置选】项卡,进行设置:
通过以上设置,我们每次按F5或者调试运行项目的时候就自动启动NUnit.exe并且加载生成的文件,只需要点击【Run】就可以测试了。相当方便。