編譯項(xiàng)目生成dll。我們可以在NUnit主界面上點(diǎn)擊[Project]->[Add Assembly...]來添加剛才編譯生成的dll,加載成功后界面如下所示:
點(diǎn)擊界面上的[Run]按鈕可以開始測(cè)試了。注意這種方式下是測(cè)試所有的測(cè)試方法,如果我們只想測(cè)試某幾個(gè)方法,可以勾選方面前面的復(fù)選框(默認(rèn)情況下復(fù)選框不出現(xiàn),需要按照點(diǎn)擊[Tools]->[Setting]打開設(shè)置界面,然后點(diǎn)擊在[GUI]下面找到[Tree Display],勾選上“Show CheckBoxes”即可)。
如果我們只是想單獨(dú)測(cè)試某個(gè)方法,那更簡(jiǎn)單了——直接雙擊那個(gè)測(cè)試方法即可。
有時(shí)候我們進(jìn)行測(cè)試時(shí)還會(huì)用到一些config文件里面的配置信息,如在app.config/web.config中保存數(shù)據(jù)庫連接字符串信息及其他的配置信息,為了能讓NUnit測(cè)試時(shí)能讀取app.config/web.config中保存的配置信息,我們需要對(duì)NUnit進(jìn)行配置。
為了演示,我們制定以下信息:
項(xiàng)目名稱:UnitTestDemo
項(xiàng)目位置:D:BlogCodeUnitTestDemo
項(xiàng)目編譯模式(Debug/Release):Debug
為了演示剛才的如何對(duì)config文件中保存的數(shù)據(jù)進(jìn)行測(cè)試,我們?cè)趧偛诺拇a基礎(chǔ)上編寫了三個(gè)測(cè)試用例,代碼如下:
[csharp] view plaincopy
[Test]
public void Test0_51CTOBlog()
{
StringAssert.AreEqualIgnoringCase(ConfigurationManager.AppSettings["51ctoBlog"], "http://zhoufoxcn.blog.51cto.com");
}
[Test]
public void Test0_CSDNBlog()
{
StringAssert.AreEqualIgnoringCase(ConfigurationManager.AppSettings["CSDNBlog"], "http://blog.csdn.net/zhoufoxcn");
}
[Test]
public void Test0_SinaWeiBo()
{
StringAssert.AreEqualIgnoringCase(ConfigurationManager.AppSettings["SinaWeiBo"], "http://weibo.com/zhoufoxcn");
}
同時(shí)在app.config文件的appSettings節(jié)點(diǎn)增加以下數(shù)據(jù):
[csharp] view plaincopy
<appSettings>
<add key="51ctoBlog" value="http://zhoufoxcn.blog.51cto.com"/>
<add key="CSDNBlog" value="http://blog.csdn.net/zhoufoxcn"/>
<add key="SinaWeiBo" value="http://weibo.com/zhoufoxcn"/>
</appSettings>
如果不在NUnit上做任何設(shè)置,我們會(huì)得到錯(cuò)誤的結(jié)果,如下圖所示:
這時(shí),我們可以按照如下步驟配置,點(diǎn)擊[Project]-[Edit...]打開如下界面:
在上圖的界面中設(shè)置ApplicationBase為當(dāng)前要測(cè)試的dll所在的路徑,本例中為:D:BlogCodeUnitTestDemoinDebug(注意如果復(fù)制全路徑到文本框中NUnit會(huì)自動(dòng)更改為相對(duì)路徑),因?yàn)楫?dāng)前項(xiàng)目是名為UnitTestDemo的類庫項(xiàng)目,所以對(duì)應(yīng)config文件名稱為UnitTestDemo.dll.config,將其填入Configuration File Name后面的文本框中,然后我們?cè)俅吸c(diǎn)擊[Run]按鈕會(huì)看到測(cè)試通過。
總結(jié)
作為xUnit體系中的一員,NUnit確實(shí)給.Net開發(fā)人員進(jìn)行單元測(cè)試帶來了不少方便,在早期我們一直都是使用NUnit進(jìn)行單元測(cè)試的。但是也存在著一些不足之處,比如:1.在xUnit體系中的JUnit是在測(cè)試每個(gè)方法時(shí)都是新生成一個(gè)實(shí)例,而在NUnit中確實(shí)一個(gè)TestFixture只會(huì)生成一個(gè)實(shí)例,這樣一來如果對(duì)要包含單元測(cè)試類中的實(shí)例數(shù)據(jù)進(jìn)行更改會(huì)可能會(huì)影響到其它的測(cè)試方法(像JUnit那樣每次都生成一個(gè)實(shí)例則不會(huì)產(chǎn)生這種情況)。2.早期大多數(shù)人以為像JUnit中一樣,[SetUp]、[TearDown]只會(huì)在所有測(cè)試前、后分別執(zhí)行一次,實(shí)際情況是在每個(gè)測(cè)試前、后都會(huì)執(zhí)行一次,為了達(dá)到JUnit中[SetUp]、[TearDown]這樣的效果,只能新增TestFixtureSetUp、TestFixtureTearDown屬性。除此之外,還存在一些缺點(diǎn)和不足。
所以本篇只是簡(jiǎn)單介紹了NUnit的一些用法,雖然NUnit提供了相當(dāng)多的斷言及Attribute,但實(shí)際用到的并不多,在這里介紹它是為介紹另一個(gè).NET單元測(cè)試工具作鋪墊。