單元測(cè)試基礎(chǔ)知識(shí)
單元測(cè)試是開發(fā)者編寫的一小段代碼,用于檢驗(yàn)被測(cè)代碼的一個(gè)很小的、很明確的功能是否正確。通常而言,一個(gè)單元測(cè)試是用于判斷某個(gè)特定條件(或者場(chǎng)景)下某個(gè)特定函數(shù)的行為。例如,你可能把一個(gè)很大的值放入一個(gè)有序list 中去,然后確認(rèn)該值出現(xiàn)在list 的尾部;蛘,你可能會(huì)從字符串中刪除匹配某種模式的字符,然后確認(rèn)字符串確實(shí)不再包含這些字符了。
執(zhí)行單元測(cè)試,是為了證明某段代碼的行為確實(shí)和開發(fā)者所期望的一致。
當(dāng)編寫項(xiàng)目的時(shí)刻,如果我們假設(shè)底層的代碼是正確無(wú)誤的,那么先是高層代碼中使用了底層代碼;然后這些高層代碼又被更高層的代碼所使用,如此往復(fù)。當(dāng)基本的底層代碼不再可靠時(shí),那么必需的改動(dòng)無(wú)法只局限在底層。雖然你可以修正底層的問題,但是這些對(duì)底層代碼的修改必然會(huì)影響到高層代碼。于是,一個(gè)對(duì)底層代碼的修正,可能會(huì)導(dǎo)致對(duì)幾乎所有代碼的一連串改動(dòng),從而使修改越來(lái)越多,也越來(lái)越復(fù)雜。從而使整個(gè)項(xiàng)目也以失敗告終。
而單元測(cè)試的核心內(nèi)涵:這個(gè)簡(jiǎn)單有效的技術(shù)是為了令代碼變得更加完美。
NUnit介紹
NUnit 是一個(gè)免費(fèi)開源的產(chǎn)品,它提供了一套測(cè)試框架和一個(gè)測(cè)試運(yùn)行程序(test runner)。
注意:test tunner 知道如何尋找具有 [TestFixture] 屬性的類和類中的 [Test] 方法。
如何安裝 NUnit
在官網(wǎng)下載NUnit,當(dāng)前新的版是2.4.8,我下的是NUnit-2.4.8-net-2.0.zip。
NUnit第一個(gè)演示
我們用Visual Studio 2008新建一個(gè)NUnit項(xiàng)目:
為了便于演示,我們把默認(rèn)的Program.cs改成Calculator.cs,在Calculator類里,我們實(shí)現(xiàn)簡(jiǎn)單的加減乘除四個(gè)方法。完整代碼如下:
using System;
namespace NUnitTest
{
public class Calculator
{
/// <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;
}
static void Main(string[] args)
{
Calculator cal = new Calculator();
int result = cal.Add(2,3);
Console.WriteLine(result);
Console.ReadKey(true);
}
}
}
如果沒有單元測(cè)試,我們普通的測(cè)試方法像是Main方法一樣,這樣的測(cè)試是一個(gè)很邪惡的測(cè)試方法,花時(shí)間且很難得到我們想要的結(jié)果。