云淡风清's blog

首页 新随笔 管理

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 并且继续修改代码,改成像下面的写法:

 

代码
public void TransferFunds(Account destination, float amount)
{
    destination.Deposit(amount);
    Withdraw(amount);
}

        现在重新编译你的代码,再次在GUI 里点运行按钮,状态条和测试树变绿了.(注意:GUI 已经自动为你加载组件了,我们要一直保持GUI 为打开状态,在IDE里继续写代码,写更多的代码. )

       让我们在Account 代码里加入一些错误的核算,我们要加极少量的余额为Account 确保可以为他们的客户支付少量的透支保护费,下面让我们给这个类加少量的余额属性.

 

private float minimumBalance = 10.00F;
public float MinimumBalance
{
    
getreturn 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);
}

 

 

 

 

 

 

 

posted on 2009-12-01 13:50  云淡风清(ydfqing)  阅读(418)  评论(0编辑  收藏  举报