單元測試是一種針對源碼、低層次的,為程式員設計的測試。可以保證所寫的代碼符合軟體需求和遵循開發的目標,並在軟體開發早期減少程式Bug的數量,單元測試是方法層面上的測試,也是測試中粒度最小的測試。
為什麼需要單元測試?
關於單元測試的重要性,這裡的文章寫得很詳細:程式員為什麼不寫單元測試?
1.下載和安裝Nuint
在.NET 開發中我們既可以使用Visual Studio 內建的測試架構,也可以使用開源的Nunit架構,二者在使用上並沒有太大的區別,在這裡我們使用Nunit架構來作為我們的單元測試工具。
1.1 下載並安裝Nunit架構
首先我們到Nunit項目的首頁去下載Nunit的最新版本和查看協助文檔,Nunit項目的首頁:http://www.nunit.org/。在下載頁面我們可以下載安裝包格式或者是免安裝的程式壓縮包,在這裡我們下載的是最新版2.6.2的安裝程式,下載後安裝。
2. 第一個單元測試
首先建立一個NunitQuickStart的類庫項目並添加對nunit.framework.DLL 檔案(在Nunit的安裝目錄中)的引用。
2.1 建立一個被測試類別
這是一個包含尋找最大數方法的Cmp類:
1 public class Cmp 2 { 3 /// <summary> 4 /// 尋找最大數 5 /// </summary> 6 /// <param name="list">int數組</param> 7 /// <returns></returns> 8 public static int Largest(int[] list) 9 {10 int index, max = Int32.MaxValue;11 for (index = 0; index < list.Length; index++)12 {13 if (list[index] > max)14 {15 max = list[index];16 }17 }18 return max;19 }20 }
2.1 建立單元測試
測試代碼要做要最好的準備:
- 準備測試所需要的各種條件
- 調用要測試的方法
- 完成後清理各種資源
在Nunit架構中使用斷言(一些輔助函數用於協助程式員確定被測試函數是否正常工作),下面是Nunit中的各種斷言:
1.相等性測試
1 AreEquals —— Assert.AreEqual(7.8599, 7.85,0.01,"ok");
2.驗證給定對象是否為空白/非空
1 IsNull —— Assert.IsNull(object[,string message])2 IsNotNull(object[,string message])
3.引用相同測試
1 AreSame(expected,actual[,string message])
4.驗證給定二元條件是否為真/假
1 IsTrue(bool condition[,string message])2 IsFalse(bool condition[,string message])
5.Fail —— 使測試立即失敗
單元測試原則:當有測試失敗時,就不能再給原有代碼添加新特性,應該先修複這個失敗的測試,然後再做其他的工作。
建立測試類別
建立測試類別和測試方法都是通過使用特性來添加的,測試類別需要加上TestFixture特性,且必須為Public(該類必須有一個Public的預設無參建構函式);測試方法需要加上Test特性,且必須為Public
下面是測試類別的代碼:
1 [TestFixture] 2 public class TestLargest 3 { 4 /// <summary> 5 /// 測試Largest函數是否支援負數 6 /// </summary> 7 [Test] 8 public void LargestOfNegative() 9 {10 Assert.AreEqual(-7, Cmp.Largest(new int[] { -9, -7, -8 }));11 }12 13 /// <summary>14 /// 測試Largest函數對Null數組的處理15 /// 如果該測試方法沒有拋出AggregateException異常,測試失敗16 /// </summary>17 [Test, ExpectedException(typeof(AggregateException))]18 public void LargestOfEmpty()19 {20 Cmp.Largest(new int[] { });21 }22 }
2.2 運行單元測試 運行使用Nunit的單元測試,有下面三種方式,下面分別對使用GUI和VS外掛程式這兩種種方式進行示範,命令列方式可以查看Nunit文檔:
- NUnit GUI —— 使用圖形化使用者介面
- NUnit command —— 使用命令列
- Visual Studio Plug(Visual NUnit) —— 使用Visual Studio 外掛程式
使用GUI方式只需要直接開啟運行Nunit程式,選擇File——>Open Project,選擇建立項目,測試類別項目所在目錄中選擇編譯後的DLL檔案,即可:
直接點擊Run運行測試:
我們可以看到,狀態條變成了紅色,這表示我們的測試沒有通過,綠色表示測試通過,黃色表示某些測試忽略。根據測試結果的反饋,我們修改代碼:
1 /// 尋找最大數 2 /// </summary> 3 /// <param name="list"></param> 4 /// <returns></returns> 5 public static int Largest(int[] list) 6 { 7 if (list.Length == 0) 8 { 9 throw new AggregateException("Largest: empty list");10 }11 int index, max = Int32.MinValue;12 for (index = 0; index < list.Length; index++)13 {14 if (list[index] > max)15 {16 max = list[index];17 }18 }19 return max;20 }
再次運行測試:
或者可以選擇更方便的方式:選擇建立的測試類別庫項目——>點擊滑鼠右鍵——>選擇屬性:
選擇"調試選項",選擇啟動外部程式,輸入Nunit Gui程式所在路徑:選擇後就可以直接運行類庫項目來啟動Nunit GUI程式了。
使用Visual Nunit外掛程式:
:http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099/
安裝後,將外掛程式的輸出面板顯示出來:視圖——> 其他視窗——>Visual Nunit,可以直接在點擊Run,運行測試:
運行測試:
樣本下載:NuintQuickStart
參考資料&進一步閱讀
Pragmatic Unit Testing in C# with NUnit, 2nd Edition