编译并运行这个例子。假设你已经将你的测试代码编译为bank.dll。打开NUint Gui(安装程序会在你的桌面和“程序”菜单中建立一个快捷方式),打开GUI后,选择File->Open菜单项,找到你的bank.dll并在“Open”对话框中选中它。bank.dll装载后你会在左边的面板中看到一个测试树结构,还有右边的一组状态面板。单击Run按钮,状态条和测试树种的TransferFunds节点变成了红色——我们的测试失败了。“Errors and Failures”面板显示如下消息——“TransferFunds: expected <250> but was <150>”,在它正下方的堆栈跟踪面板报告了测试失败的语句在代码中的位置——“at bank.AccountTest.TransferFunds() in C:\nunit\BankSampleTests\AccountTest.cs:line 17”
public float MinimumBalance {
get {
return minimumBalance;
}
}
我们使用一个异常来指出透支:
namespace bank {
using System;
public class InsufficientFundsException : ApplicationException {
}
}
向我们的AccountTest类添加一个新的方法:
[Test]
[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);
}
这个测试方法除了[Test]特性之外还关联了一个[ExpectedException]特性——这指出测试代码希望抛出一个指定类型的异常;如果在执行过程中没有抛出这样的一个异常——该测试将会失败。编译你的代码并回到GUI。由于你编译了你的测试代码,GUI会变灰并重构了测试树,好像这个测试还没有被运行过(GUI可以监视测试程序集的变化,并在测试树结构发生变化时进行更新——例如,添加了新的测试)。点击“Run”按钮——我们又一次得到了一个红色的状态条。我们得到了下面的失败消息:“TransferWithInsufficentFunds: InsufficientFundsException was expected”。我们来再次修改Account的代码,象下面这样修改TransferFunds()方法:
public void TransferFunds(Account destination, float amount) {
destination.Deposit(amount);
if(balance - amount < minimumBalance)
throw new InsufficientFundsException();
[Test]
[Ignore("Need to decide how to implement transaction management in the application")]
public void TransferWithInsufficientFundsAtomicity() {
// code is the same
}
编译并运行——黄条。单击“Test Not Run”选项卡,你会看到bank.AccountTest.TransferWithInsufficientFundsAtomicity()连同这个测试被忽略的原因一起列在列表中。
[Test]
[ExpectedException(typeof(InsufficientFundsException))]
public void TransferWithInsufficientFunds() {
source.TransferFunds(destination, 300.00F);
}
[Test,
Ignore (
"Need to decide how to implement transaction management in the application"
)]
public void TransferWithInsufficientFundsAtomicity() {
try {
source.TransferFunds(destination, 300.00F);
}
catch(InsufficientFundsException expected) {
}