下载地址:http://sourceforge.net/projects/nunitaddin
本事例所用版本:http://HdhCmsTestcnblogs测试数据/Files/young18/nunit2.3.rar
NUnit Quick Start
原文档:http://HdhCmsTestnunit.org
翻 译:Young.J
说 明:该实例是最早期的nunit版本中找到,在测试驱动的开发中它并不是一个很好的例子,但它能阐明使用nunit的最基本方法。
现在开始我们的例子。假设我们开始写一个银行业的应用程序,我们有一个基类—Account,Account主要负责资金的增加,撤销和转帐,下面是该类的代码
1 namespace bank2 {
3 public class Account
4 {
5 private float balance;
6 public void Deposit( float amount)
7 {
8 balance += amount;
9 }
10
11 public void Withdraw( float amount)
12 {
13 balance -= amount;
14 }
15
16 public void TransferFunds(Account destination, float amount)
17 { }
18
19 public float Balance
20 {
21 get { return balance;}
22 }
23 }
24 } 在我们来写一个需要测试的类—AccountTest,我们第一个测试的方法是TransferFunds 1 namespace bank
2 {
3 using NUnit.Framework;
4
5 [TestFixture]
6 public class AccountTest
7 {
8 [Test]
9 public void TransferFunds()
10 {
11 Account source = new Account();
12 source.Deposit( 200.00F );
13 Account destination = new Account();
14 destination.Deposit( 150.00F );
15 source.TransferFunds(destination, 100.00F );
16 Assert.AreEqual( 250.00F , destination.Balance);
17 Assert.AreEqual( 100.00F , source.Balance);
18 }
19 }
20 } 现在做的第一件事是声明这个类有一个[TestFixture]属性,通过这种方法显示这个类包含测试代码(此属性可以被继承),这个类必须是public类且其派生内没有限制,这个类当然必须有一个默认构造函数。
这个类仅有的一个方法—TransferFunds,有一个[Test]属性,显示他是一个测试方法,该方法返回void,没有参数,在这个方法里我们对测试对象作了必须的初始化,Assert类定义了一些方法的集合体,用它来检测设置条件,在我们的例子中,我们用AreEqual方法确保后面两个账户的转帐都有一个正确的剩余资金(这些是一些重载方法,这个例子中用的版本包含下面几个参数,第一个参数是期望值,第二个参试是真实值),
编译运行这个例子,假设你编译你的代码为bank.dll,运行NUnit Gui,选择File->Open menu item,载入刚才编译过的dll文件,点击run,我们可以看到测试条变成红色—我们的测试失败了,在“Errors and Failures”面板显示一面信息:
TransferFunds : expected <250> but was <150>
这个现象是我们所期望的,测试失败的原因是我们没有实现TransferFunds方法,现在我们开始让它工作,修改你的TransferFunds方法如下: 1 public void TransferFunds(Account destination, float amount)
2 {
3 destination.Deposit(amount);
4 Withdraw(amount);
5 } 现在我们再次编译代码,并在GUI中运行,我们何以看到测试条变绿!测试成功!
我们增加一些错误检测在我们的Account代码中,为balance设置一个最小值.依次来保护资金透支量 1 private float minimumBalance = 10.00F ;
2 public float MinimumBalance
3 {
4 get { return minimumBalance;}
5 } 增加一个表明透支的异常; 1 public class InsufficientFundsException : ApplicationException
2 {
3 } 增加一个测试方法到AccountTest类中 1 [Test]
2 [ExpectedException( typeof (InsufficientFundsException))]
3 public void TransferWithInsufficientFunds()
4 {
5 Account source = new Account();
6 source.Deposit( 200.00F );
7 Account destination = new Account();
8 destination.Deposit( 150.00F );
9 source.TransferFunds(destination, 300.00F );
10 } 这个测试方法的[Test]属性有一个 [ExpectedException]属性,这表明这段测试代码期望得到某一类型的异常,如果这种异常没有出现在执行过程中,这车是失败,现在编译代码,启动NUnit Gui,这是测试条变红,提示错误信息:
TransferWithInsufficentFunds : InsufficientFundsException was expected
让我们重新配置Account的代码,让它抛出异常,按下面的实例修改TransferFunds方法. 1 public void TransferFunds(Account destination, float amount)
2 {
3 destination.Deposit(amount);
4 if (balance - amount < minimumBalance)
5 throw new InsufficientFundsException();
6 Withdraw(amount);
7 } 编译,运行测试-测试条变绿,成功了,但是,我们看看这个代码,我们仅仅写了我们可以看到的转帐操作中的错误,现在让我们来写一个测试来证实我们不确定的错误,添加下面一个测试方法 1
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did34208