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