簡單來說,單元測試就是局部測試,即是對項目中的某個靜態類測試、靜態方法測試、類的實例化測試以及類的方法測試。當您有一個具體的項目時您可以通過運行查看結果的方式進行測試,但當您只有一個類而沒有完整的項目時便會很麻煩,單元測試則可以解決這種問題。單元測試有兩種方法,一個是NUnit,另一個是微軟在VS提供的單元測試,我個人覺得用VS內置的單元測試比較簡單,因為使用Nunit測試的話需要下載兩個文件,並且用Nunit測試的話需要自己手動輸入測試類,用VS內置的測試則會自動生成。還有用VS內置的測試時,測試所用的類和方法有中文提示(用Nunit的話沒有,我記得是這樣),不過我看網上其他人的說法是VS內置的單元測試會相對復雜但更全面。我是在網上結合多個資料學習和總結的,會比較基礎,不要嫌多(只是我比較啰嗦而已),希望對看到的您有些許幫助,這里用兩種方法對簡單的例子進行測試。
一、使用Nunit進行單元測試
1、下載Nunit,地址為:http://www.nunit.org/index.php?p=download
2、下載Visual Nunit 2010,地址為:http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099
3、創建項目並測試
1.VS2010中新建一個項目,由於我們只需要對稍后創建的類進行測試,與創什么項目無關,所以您可以創建窗體應用程序或Web應用程序的項目等,這里我創的是控制台應用程序,為了方便查看,我把項目名稱取為:使用Nunit進行單元測試
2.在解決方案資源管理器中的引用上右鍵,選擇添加引用,找到並添加步驟1中下載的Nunit中的nunit.framework.dll文件(默認安裝時路徑為:C:\Program Files \NUnit 2.6\bin\framework\nunit.framewor.dll)。
3.創建一個普通的類,后面我們將會對該類進行測試。右鍵解決方案資源管理器中的項目名稱->添加->類,將類名改為SimpleClass,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 使用Nunit進行單元測試
{
public class SimpleClass
{
/// <summary>
/// 除法運算
/// </summary>
public int Division(int num1,int num2)
{
return num1 / num2;
}
}
}
4.普通類編寫好后,我們現在再創建一個測試類。右鍵解決方案資源管理器中的項目名稱->添加->類,將類名改為TestClass,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;//添加命名空間
namespace 使用Nunit進行單元測試
{
[TestFixture]//代表用於測試的類
public class TestClass
{
/// <summary>
/// 模擬用正常數據進行測試
/// </summary>
[Test]//代表測試用例
public void DivisionTestNatural()
{
var simpleClass = new SimpleClass();
var result = simpleClass.Division(10, 5);//調用SimpleClass類中的除法運算,用10除以5
Assert.AreEqual(2, result);//設置測試的期望值為2,實際值為result,若實際值不等於期望值時即測試出錯
}
/// <summary>
/// 模擬用異常數據進行測試
/// </summary>
[Test]
public void DivisionTestNoNatural()
{
var simpleClass = new SimpleClass();
var result = simpleClass.Division(10, 5);
Assert.AreEqual(3, result);
}
}
}
5.快捷鍵Ctrl+F5運行項目(網上的資料寫的是生成項目,但這么做的話如果您測試過一個類之后又新建了一個類要進行測試,您會發現找在Visual Nunit中找不到您新創建的類,如果這里您看不懂,不過做完項目后您就會明白)。選擇視圖->其他窗口->Visual Nunit(我查找資料時別人的資料說Ctrl+F7是快捷鍵,不過我試了沒效。如果在其他窗口中找不到Visual Nunit則將VS關閉后重新打開),在Project、Namespace、Fixture中選擇對應項(當您在前文中像我所說的創建第二個測試類之后只是生成項目而沒有使用Ctrl+F5運行項目,您會發現您在Fixture中找不到您新創建的測試類),最后點擊Run按鈕。
二、使用vs進行單元測試
1、同前面提到的用Nunit測試一樣需要先創建項目,這里我同樣創建的是控制台應用程序,並命名項目為:使用VS進行單元測試。
2、創建一個普通類,為了方便需要學習兩種方法的朋友可以對比測試時的不同,我將創建和上文使用Nunit一樣的類,即類名一樣為:SimpleClass,代碼編寫也同上文一樣,好吧,我復制就好:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 使用VS進行單元測試
{
public class SimpleClass
{
/// <summary>
/// 除法運算
/// </summary>
public int Division(int num1,int num2)
{
return num1 / num2;
}
}
}
3、編寫完SimpleClass類之后,在頁面上直接右鍵->創建單元測試,接着在彈出的對話框中選擇您需要測試的類或方法,這里我只需要對步驟2中的除法運算的方法進行測試,所以在對話框中勾選Division方法,然后點擊確定后會再彈出對話框,該對話框需要填寫的是測試項目(類似於使用Nunit測試時創建的測試類TestClass,使用VS測試稱為測試項目)的名稱,還是為了對比,我將名稱改為TestClass,點擊創建,在解決方案資源管理器中可以看到生成了一個解決方案和一個文件夾,並且會自動跳到SimpleClassTest.cs的代碼編寫頁面,在這個頁面中需要編寫和重點注意的方法是最下面的DivisionTest()方法,您需要做的是修改其中num1、num2和expected的值(我設置為與使用Nunit測試一樣的值)並且將代碼“Assert.Inconclusive("驗證此測試方法的正確性。")”注釋或刪掉,整理后DivisionTest()方法代碼如下:
/// <summary>
///Division 的測試
///</summary>
[TestMethod()]
public void DivisionTest()
{
SimpleClass target = new SimpleClass(); // 創建SimpleClass對象
int num1 = 10; // 參數1
int num2 = 5; // 參數2
int expected = 2; // 設置測試的期望值
int actual;//用來接收測試的實際值
actual = target.Division(num1, num2);//調用SimpleClass類中的Division()方法,並將返回值傳給變量actual
Assert.AreEqual(expected, actual);//該方法用來驗證方法內的兩個參數即期望值和實際值是否一致,如果不相等則測試不通過
//Assert.Inconclusive("驗證此測試方法的正確性。");//該句代碼如果沒有注釋或刪除,則最后顯示的是無結論而不是測試通過或不通過
}
4、編寫完上一步驟的代碼后,在菜單欄中選擇測試->運行->當前上下文中的測試,該例中結果為通過,若要不通過的例子只需將DivisionTest()方法中的變量expected的值由2改為其他數值即可。
以上就是單元測試的兩種方法,如果有錯誤或不足的地方還請指出,當然有好的地方也稍微可以誇我一下喲~