您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > Nunit
NUnit 快速入门
作者:网络转载 发布时间:[ 2014/1/15 9:16:10 ] 推荐标签:NUnit 测试 开源

本测试处理[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();
 Withdraw(amount);
}

编译并运行测试-绿色的状态条。成功了!但是等等,看看我们刚才编写的代码,我们会发现银行可能在每个没有成功的转帐操作失去一笔钱。让我们编写一个测试来证明我们的疑虑,增加如下测试方法:

[Test]
public void TransferWithInsufficientFundsAtomicity()
{
 Account source = new Account();
 source.Deposit(200.00F);
 Account destination = new Account();
 destination.Deposit(150.00F);
 try
 {
  source.TransferFunds(destination, 300.00F);
 }
 catch(InsufficientFundsException expected)
 {
 }

 Assert.AreEqual(200.00F,source.Balance);
 Assert.AreEqual(150.00F,destination.Balance);
}

我们正测试业务方法的事务属性-要么都成功,要么都失败。编译并运行-红条。OK,我们已经让$300.00蒸发了((1999.com déjà vu?)-源帐户有一个正确余额150.00,但是目标帐户则是$450.00.我们如何修复?我们仅需要将小余额检查调用放在更新的前面即可:

public void TransferFunds(Account destination, float amount)
{
 if(balance-amount<minimumBalance)
  throw new InsufficientFundsException();
 destination.Deposit(amount);
 Withdraw(amount);
}

如果Withdraw()方法抛出另外一个异常怎么办?我们应该在捕获代码段中执行一个追加的业务,或是依赖我们的事务管理器来恢复对象的状态?关于这点,我们需要回答一些问题,但不是现在。同时,我们应该对失败的测试些什么呢?删除它?一个比较好的方式是暂时忽略它,在测试代码中加入如下属性:

[Test]
[Ignore("Decide how to implement transaction management")]
public void TransferWithInsufficientFundsAtomicity()
{
 // code is the same
}

编译并运行-黄色的状态条。点击“Tests Not Run”,在列表里你会看到e bank.AccountTest.TransferWithInsufficientFundsAtomicity() ,而且带有测试忽略的原因:

看一下我们的测试代码,我们会发现某些重构是有顺序的。所有测试方法都共享一组通用的测试对象。我们将这个初始化代码提取到一个setup方法里,并在所有测试中重用它。我们测试类的重构版本如下:

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd