编译并运行这个例子。假设你已经将你的测试代码编译为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”
这正是预期的结果,因为我们还未实现TransferFunds()方法。现在我们来搞定它。不要关闭GUI,回到你的IDE并修改代码,使你的TransferFunds()方法看起来像这样:
public void TransferFunds(Account destination, float amount) { destination.Deposit(amount); Withdraw(amount); }
现在重新编译你的代码并再次在GUI中点击Run按钮——状态条和数节点变绿了。(注意GUI会自动地为你重新加载程序集;我们可以一直开着GUI而在IDE中继续工作并写更多的测试)。
让我们来为我们的Account的代码添加一些错误检测。为账户添加一个最小余额限制,通过你的最小透支保护费来维持它的持续运作。首先我们来为Account类添加一个最小余额保护属性:
private float minimumBalance = 10.00F; 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可以监视测试程序集的变化,并在测试树结构发生变化时进行更新——例如,添加了新的测试)。