單元測試入門——使用NUnit架構

來源:互聯網
上載者:User

  單元測試是一種針對源碼、低層次的,為程式員設計的測試。可以保證所寫的代碼符合軟體需求和遵循開發的目標,並在軟體開發早期減少程式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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.