使用Nunit进行单元测试入门
前言:
Nunit是一项开源的项目,利用Nunit,你可以方便快捷地对已有的.NET组件进行单元测试。利用Nunit,你可以在不修改原有代码的情况下,编写专门的测试代码对需要测试的函数和组件进行测试。如果大家有兴趣可以将Nunit和VSTS自带的单元测试进行比较:)
正文:
如果你的机器上没有安装Nunit,请先到http://www.nunit.org/download.html下载,并安装到机器上。
接下来,我们来看看究竟如何来使用Nunit进行单元测试
现在,我有这样一个Account类:
namespace bank
{
public class Account
{
private float balance;
public void Deposit(float amount)
{
balance += amount;
}
public void Withdraw(float amount)
{
balance -= amount;
}
public void TransferFunds(Account destination, float amount)
{
}
public float Balance
{
get { return balance; }
}
}
}
但是我并不知道这个类是否可以正确地工作,所以我需要对Account类进行单元测试。
在可以新建一个类库项目,在这个类库的引用项目中指定Account.dll和Nunit.framework.dll。注意,Nunit.framework.dll文件在你安装Nunit的bin目录下。
然后我在这个新建的类库项目中添加一个AccountTest的类文件后编译,该文件如下:
namespace bank
{
using NUnit.Framework;
[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
Account source = new Account();
source.Deposit(200.00F);
Account destination = new Account();
destination.Deposit(150.00F);
source.TransferFunds(destination, 100.00F);
Assert.AreEqual(250.00F, destination.Balance);
Assert.AreEqual(100.00F, source.Balance);
}
}
}
请注意,这个测试类一定要是public的,否则Nunit无法正常工作。
接 下来,我们启动Nunit(在你的桌面上有快捷方式的图标),然后在File -> Open Project中打开到你刚刚编译出来的AccountTest.dll即可。这个时候,你会发现右边有一个“Run”的按钮可以使用了,点击它,这个时 候,Account类的单元测试就开始了。测试完毕后,出现红色的标志,这是测试失败的标志。这说明我们的Account类有问题,我们需要将 Account类中的Withdraw方法完成:
public void Withdraw(float amount)
{
balance -= amount;
}
重新编译Account类以后,我们再次点击“Run”按钮,这个时候,红色变成了绿色,这说明测试通过了。
这样,你便完成了对Account类的测试,接下来,我们来详细说一说AccountTest类中奇怪的Attributes。
l TestFixture
这个Attribute只能在类上使用,他告诉Nunit这个类中包含有需要测试的方法。
不过注意这个类保证一下4点:
1. 这个类必须是Public的。
2. 这个类不能是Abstract的。
3. 这个类必须有一个默认构造函数。
4. 这个类中的方法被标记的Attribute只能出现一次:SetUp, TearDown, TestFixtureSetUp 和 TestFixtureTearDown。
l Test
这个Attribute只能标记了TestFixture的类中的方法上使用,他告诉Nunit这个是一个需要测试的方法。
在下来就是AccountTest类中的TransferFunds方法中的Assert。
它类似与.NET Framework中的Assert类,如果Assert中的方法返回False,这测试结果为失败,否则为成功。在Nunit中,就是使用Assert来判断一个测试是否通过。
好了,相信现在大家一定对Nunit的使用有了基本的了解了。那么,恭喜大家了。
后记:
Nunit是一个不断完善的免费工具,但是这并代表他比VSTS自带的单元测试工具差,他对VS的支持也是相当不错的,而且可以针对自己对测试的需要来自定义很多功能,同时对插件的支持也给了我们更大的空间来发挥Nunit的功能。
关于更多更详细的介绍,请大家查看Nunit的帮助文档:)