既然是從零開始就先介紹一下NUnit ()一個NET 框架下的單元測試框架提供了類似於 JUnit的功能也是 NET 框架下開發者應用最廣泛的單元測試框架之一(其他的還包括 CSUnit 等等)
它的基本原理是通過 NET 的反射機制利用代碼中的元數據(Attribute)來辨識到底有哪些單元測試單元測試(Unit Test)是測試驅動開發(TestDriven DevelopmentTDD)很重要的一環而TDD又是敏捷開發方法(比如極限編程eXtreme Programming)的重要組成部分…… 總之單元測試很重要就對了 ^_^ (有關TDDXP的詳細介紹在博客園的很多blog上就有當然 google 上就更多了)
例子開始
下載安裝 NUnit(最新版可能是 )
很重要的步驟測試一下 NUnit 是否安裝成功
方法打開 NUnitFileOpen選 NUnit 安裝目錄下的bin目錄中的 nunittestsdll這時NUnit 主窗口左部的樹型列表中會出現很多個測試的名字然後點 Run 按鈕接著測試就開始運行了直到 NUnit 主窗口左部的樹型列表中所有的測試前面都變成綠色那就是成功了(失敗的測試會有紅色的提示沒有運行的測試會有黃色的提示在這一步中有可能 Console Runner 那個測試集合會出現問題萬一出現問題重啟一下 NUnit 再 Run一般都是沒問題的)
怎麼在開發中使用 NUnit 框架?
)打開VSNET 新建一個 C# 的 Console 項目在項目的 References 添加 nunitframework(References 在 Solution Explorer 窗口中右鍵Add Reference)
)隨便寫一個類
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) // 轉賬
{
destinationDeposit(amount);
Withdraw(amount);
}
public float Balance
{
get{ return balance; }
}
public static void Main(string[] args)
{
Account source = new Account(); // 新建個賬戶
sourceDeposit(F); // 存
Account destination = new Account(); // 又建了一個
destinationDeposit(F); // 存
sourceTransferFunds(destination F); // 第一個賬戶轉給第二個
}
}
這個類很簡單編譯通過運行一切ok
)在同一個項目中增加一個用來測試 Account 類中的方法的測試類(裡面的幾個Attribute是最關鍵的)
using NUnitFramework; // 千萬別忘了這一行
[TestFixture] // 這個Attribute說明 AccountTest 類中包含有測試
public class AccountTest
{
[Test] // 這個Attribute說明了 TestTransferFunds() 方法就是用來做測試的
// 一般測試方法的名字就是在被測試方法名前加上Test
public void TestTransferFunds()
{
// 准備工作
Account source = new Account();
sourceDeposit(F);
Account destination = new Account();
destinationDeposit(F);
sourceTransferFunds(destination F); // 轉賬
// 利用 NunitFramework 中的 Assert 類看看轉賬以後兩個賬戶的余額是否正確
AssertAreEqual(F destinationBalance);
AssertAreEqual(F sourceBalance);
}
}
然後編譯一下生成一個 exe 文件(如果要生成 DLL 的話更改一下這個這個項目的 Output Type屬性改成 Class Library就可以了這個改動還是在Solution Explorer 窗口中項目名上 右鍵屬性 對於這個例子生成DLL的話就不需要 Main() 方法了)
)打開NUnitFileOpen找到剛才編譯生成的 exe然後 Run滿眼可愛的綠色
就說明測試都成功了^_^
如果想看看測試失敗的樣子可以把 AssertAreEqual() 裡面的值改一下……
例子中只用到了 Test Fixture 和 Test 這兩個Attribute其他更多的用法在 NUnit 文檔中寫得十分清楚文檔中也有些更好的例子……
自動化的單元測試有什麼用? 答省時省力當一個系統需要測試的類/方法 成千上萬時手工的測試方法(用控制台打印出信息等等)的效率會比較低
總結NUnit 很好的利用了反射機制單元測試十分方便但是對於復雜的對象寫出低耦合的測試代碼可能有一定難度
From:http://tw.wingwit.com/Article/program/net/201311/12066.html