使用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最後,執行測試。在測試方法內部任意一處右擊,點選【執行測試】即可。
顯示最後結果:
總結:
至此,一個簡單的單元測試便已經實現了。每當接觸了一個新的事物,剛開始潛意識裡總是覺得它不太容易掌握,但是在困難的東西都經不過自己的反覆推敲,單元測試亦是如此。在解決新的問題,克服新的困難的過程中,不斷提高著我們接收新事物的能力,增強著我們認識新事物的信心。