NUnit 2.5.1
让我们从一个简单的例子开始,假设我们写一个银行系统,有一个帐户Account,操作包括:deposit存款,withdraw取款,transfer funds转帐资金.我们可以如下这样写:
NUnit Quick Start
好了,我们可以对这个类写一个测试程序AccountTest,第一个方法,我们测一下"转帐资金".
首先应该注意到这个类有一个属性[TestFixture] 与它相关联,用这种方式表明这个类包括测试代码(属性可以被继承),对与它的父类来说,必须是puclic并且是没有限制的,还得有一个构造函数.
这个类只有一个方法TransferFunds,有一个[Test]属性 与它相关联,这属性表明了是一个测试的方法, 这个测试方法没有返回值,也没有参数.在我们的测试方法里,我们习惯对测试对象进行初始化操作,执行测试交易方法,检查交易对象的状态,这个生效的类定义了一个方法的集合,用与检测后置条件.在我们的例子里,用AreEqual方法来确保,转帐后,两家银行保持正确的余额.(这个方法有一些负载,这个版本在这个例子里,有如下参数:第一个参数是期望值,第二个参数是实际值.)
编译后运行,假设你已经编译成功生成了bank.dll.打开NUnit Gui ,(安装软件成功后会在桌面上有一个快捷方式,存在Program Files文件夹里.)打开后,选择文件,打开菜单项,选择到bank.dll文件的位置,把它放到"打开"对话框,当bank.dll加载以后,你会在面板左侧看到一个树型结构,右侧是一个集合状态的面板.点击运行按钮,状态条和TransferFunds 结点在右侧的测试树上变红了,我们的测试失败了."错误和失败"面板提示以下信息":
TransferFunds : expected <250> but was <150>
堆栈跟踪面板生成的报告位于测试代码失败的下方:
at bank.AccountTest.TransferFunds() in C:\nunit\BankSampleTests\AccountTest.cs:line 17
这是预期的结果,失败是因为我们还没有编译这个TransferFunds 方法,我们继续,不要关闭GUI ,回到你的IDE 并且继续修改代码,改成像下面的写法:
{
destination.Deposit(amount);
Withdraw(amount);
}
现在重新编译你的代码,再次在GUI 里点运行按钮,状态条和测试树变绿了.(注意:GUI 已经自动为你加载组件了,我们要一直保持GUI 为打开状态,在IDE里继续写代码,写更多的代码. )
让我们在Account 代码里加入一些错误的核算,我们要加极少量的余额为Account 确保可以为他们的客户支付少量的透支保护费,下面让我们给这个类加少量的余额属性.
public float MinimumBalance
{
get{ return minimumBalance;}
}
我们会抛出一个异常来显示透支情况.
{
using System;
public class InsufficientFundsException : ApplicationException
{
}
}
再给AccountTest 类添加一个新的测试方法.
[ExpectedException(typeof(InsufficientFundsException))]
public void TransferWithInsufficientFunds()
{
Account source = new Account();
source.Deposit(200.00F);
Account destination = new Account();
destination.Deposit(150.00F);
source.TransferFunds(destination, 300.00F);
}