NUnit Quick Start
原文檔:http://www.nunit.org
翻 譯:Young.J
說 明:該實例是最早期的nunit版本中找到,在測試驅動的開發中它並不是一個很好的例子,但它能闡明使用nunit的最基本方法。
現在開始我們的例子。假設我們開始寫一個銀行業的應用程序,我們有一個基類—Account,Account主要負責資金的增加,撤銷和轉帳,下面是該類的代碼
1
namespace bank

{
public class Account
{
private float balance;
public void Deposit(float amount)
{
balance+=amount;
}
public void Withdraw(float amount)
{
balance-=amount;
}
public void TransferFunds(Account destination, float amount)
{ }
public float Balance
{ 
get
{ return balance;}
}
}
} 在我們來寫一個需要測試的類—AccountTest,我們第一個測試的方法是TransferFunds
1
namespace bank

{
using NUnit.Framework;
[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
Account source = new Account();
source.Deposit(200.00F);
Account destination = new Account();
destination.Deposit(150.00F);
source.TransferFunds(destination, 100.00F);
Assert.AreEqual(250.00F, destination.Balance);
Assert.AreEqual(100.00F, source.Balance);
}
}
} 現在做的第一件事是聲明這個類有一個[TestFixture]屬性,通過這種方法顯示這個類包含測試代碼(此屬性可以被繼承),這個類必須是public類且其派生內沒有限制,這個類當然必須有一個默認構造函數。
public void TransferFunds(Account destination, float amount)

{
destination.Deposit(amount);
Withdraw(amount);
} 現在我們再次編譯代碼,並在GUI中運行,我們何以看到測試條變綠!測試成功!
private float minimumBalance = 10.00F;
public float MinimumBalance

{
get
{ return minimumBalance;}
} 增加一個表明透支的異常;
1
public class InsufficientFundsException : ApplicationException

{
} 增加一個測試方法到AccountTest類中
1
[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]屬性,這表明這段測試代碼期望得到某一類型的異常,如果這種異常沒有出現在執行過程中,這車是失敗,現在編譯代碼,啟動NUnit Gui,這是測試條變紅,提示錯誤信息:
public void TransferFunds(Account destination, float amount)

{
destination.Deposit(amount);
if(balance-amount < minimumBalance)
throw new InsufficientFundsException();
Withdraw(amount);
} 編譯,運行測試-測試條變綠,成功了,但是,我們看看這個代碼,我們僅僅寫了我們可以看到的轉帳操作中的錯誤,現在讓我們來寫一個測試來證實我們不確定的錯誤,添加下面一個測試方法
1
[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);
} 編譯運行—紅色測試條,我們算錯了300元,代碼顯示正確的結果是150元,但賬戶顯示確是450,那麼怎樣修補錯誤,能不能加一段最小基金檢測在資金處理之前呢?我們可以在catch塊中加以一些修補方法,或依靠我們的管理人員修復對象的規定,我們需要在多方面回答這些問題,但不是在現在,那在此期間我們可以怎麼做呢?移出它?一個最好的方法是忽視它,添加以下屬性在你的測試方法中
1
[Test]
[Ignore("Decide how to implement transaction management")]
public void TransferWithInsufficientFundsAtomicity()

{
// code is the same
} 編譯測試代碼—黃色,點擊"Tests Not Run",我們可以看到bank.AccountTest.TransferWithInsufficientFundsAtomicity() 在被忽視的測試列表裡。