1. 程式人生 > >使用Nunit做單元測試

使用Nunit做單元測試

    參加完自考、軟考,對單元測試都是概念上的理解,這篇博文主要是從實踐上,講解一下單元測試如何實現,使用什麼工具,以及簡單的例項講解。

一、單元測試

    單元測試,是開發者編寫的一小段程式碼,用於檢測被測程式碼一個很小、很明確的功能是否正確,是否和開發者所期望的一致。使用單元測試可以很輕鬆的實現:

    1.靜態類的測試

    2.靜態方法的測試

    3.類的例項化測試

    4.類的方法測試

二、Nunit簡介

    .NET下執行單元測試通常有兩種方法:一個是微軟在VS提供的單元測試,另一個是使用外部工具NUnit,前者可能有些複雜,但後者用起來卻簡單明瞭。

            Nunit的啟動有兩種方式,一種是在客戶端單獨啟動,這個時候需要指定已編譯好的dll路徑;另一種是整合在VS中啟動,相對前者而言,後者用起來方便一些,在VS中安裝外掛【Nunit Test Adapter】就可實行測試結果的可視化了,外掛直接在VS中搜索即可。

    

三、一個簡單的Demo

    通過一個簡單的Demo,讓大家感受一下,單元測試是非常容易實現的。

    1.加入我們要測試的類為【Calculator】,裡面有加、減、乘、除四個方法,程式碼如下:

namespace NUnitTest
{
    public class Calculator
    {
         static void Main(string[] args)
        {
            Calculator cal = new Calculator();
            int result = cal.Add(2,3);
            Console.WriteLine(result);

            Console.ReadKey(true);
        }

         /// <summary>
         /// 加法
         /// </summary>
         /// <param name="a"></param>
         /// <param name="b"></param>
         /// <returns></returns>
         public int Add(int a, int b)
         {
             return a + b;
         }

         /// <summary>
         /// 減法
         /// </summary>
         /// <param name="a"></param>
         /// <param name="b"></param>
         /// <returns></returns>
         public int Minus(int a, int b)
         {
             return a - b;
         }

         /// <summary>
         /// 乘法
         /// </summary>
         /// <param name="a"></param>
         /// <param name="b"></param>
         /// <returns></returns>
         public int Multiply(int a, int b)
         {
             return a * b;
         }

         /// <summary>
         /// 除法
         /// </summary>
         /// <param name="a"></param>
         /// <param name="b"></param>
         /// <returns></returns>
         public int Divide(int a, int b)
         {
             return a / b;
         }


    }
}

    2.其次我們要建立一個測試類【CalculatorTest】,來測試類【Calculator】裡面的方法,先看程式碼然後再給大家解釋:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;//匯入名稱空間:NUnit.Framework
using NUnitTest;//匯入“被測試類”的名稱空間

namespace TestNunitTest
{

    [TestFixture]
    public class CalculatorTest
    {
        [Test]
        public void TestAdd()
        {
            Calculator cal = new Calculator();
            int expected = 5;
            int actual = cal.Add(2, 3);
            Assert.AreEqual(expected, actual);
        }
    }

}

    2.1首先,我們要在專案中新增對NUnit的引用,也就是NUnit.Framework。

    2.2其次,NUnit的常用屬性介紹

        ①[TestFixture]

          本屬性用來標記一個類包含測試,用來指明該類是一個測試類。對這個類還有一些要求:

          ·該類必須是Public宣告,否則NUnit看不到它的存在

          ·它必須又一個預設的建構函式,否則NUnit不會構造它

          ·建構函式應該沒有任何副作用,因為NUnit在執行時經常會構造這個類多次,如果要是建構函式要什麼               副作用的話,那不是亂了.

        ②[Test]

          本屬性用來標記一個類(已經被標記為TestFixture)的某個方法是可測試的,為了和先前版本相容,               [test]忽略大小寫。這個方法也有一些要求:

          ·這個方面必須為Public宣告

          ·這個方法沒有任何引數

          ·這個方法沒有返回值

        ③Assert的使用 

          在Nunit中,Assert(斷言)是一個類,包含以下方法:AreEqual,AreSame,Equals,Fail,Ignore等方           法,具體參見Nunit文件。

    2.3最後,執行測試。在測試方法內部任意一處右擊,點選【執行測試】即可。

        

        顯示最後結果:

        

    總結:

    至此,一個簡單的單元測試便已經實現了。每當接觸了一個新的事物,剛開始潛意識裡總是覺得它不太容易掌握,但是在困難的東西都經不過自己的反覆推敲,單元測試亦是如此。在解決新的問題,克服新的困難的過程中,不斷提高著我們接收新事物的能力,增強著我們認識新事物的信心。