一、概述
NUnit是一款優(yōu)秀的開源回歸測試框架,我在《NUnit學(xué)習(xí)筆記》一文中已對其基本使用方
法進(jìn)行了簡單的介紹。但除了TestFixture、Test、SetUp、TearDown、TestFixtureSetUp和
TestFixtureTearDown這六個屬性,NUnit還提供了ExpectedException、Ignore、Suite、
Category、Explicit和Platform等屬性用于測試。本文的目的就是對這些屬性進(jìn)行介紹。
在介紹開始之前,還需要說明一些
事情,即本文只提供了C#代碼示例,而沒有提供VB、J#或Delphi代碼示例,而且在示例的編寫過程中雖然也使用了Visual
Studio.net 2005和Delphi
2006作為編輯器,但文中絕不會涉及項目創(chuàng)建的內(nèi)容。此外本文的示例都是在NUnit可視化環(huán)境下測試的,對于其運行效果,如無必要,本文將僅以文字形
式進(jìn)行說明。
二、ExpectedException
ExpectedException屬性用于測試是否會拋出指定的異常,若拋出則NUnit的狀態(tài)條為綠色,反之為紅色。
示例代碼:
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
namespace NUnitTest
{
[TestFixture]
public class Test1
{
[Test]
[ExpectedException(typeof(Exception))]
public void TestExpectedException()
{
string s = "";
if (s != "")
throw new Exception();
}
}
}
測試效果:狀態(tài)條為紅色。
具體說明:由于字符串s在初始化時已賦值為"",因此在判斷“s != ""”時條件自然不會成立,這樣就不會拋出異常,狀態(tài)條當(dāng)然也就不會為綠色了。如果想讓狀態(tài)條顯示為綠色,將判斷條件改為“s == ""”就可以了。
三、Ignore
Ignore屬性可以供類和方法使用,使用后類或方法在NUnit測試中會被忽略,也就是說,對于暫時不想運行的測試類或測試方法,可以通過Ignore屬性將其忽略掉。
示例代碼1:
[TestFixture]
[Ignore("class test ignore")]
public class Test2
{
[Test]
public void TestIgnore()
{}
}
示例代碼2:
[TestFixture]
public class Test22
{
[Test]
[Ignore("function test ignore")]
public void TestIgnore()
{}
}
測試效果:兩個示例被執(zhí)行后狀態(tài)條都會顯示為黃色。但如果你在測試時選擇的是Test2節(jié)點,就會發(fā)現(xiàn)示例一執(zhí)行后,只有Test2節(jié)點前的圓點顯示為
黃色,狀態(tài)條沒有發(fā)生任何變化,而示例二則會將Test2和TestIgnore節(jié)點前的圓點都變成黃色,狀態(tài)條也顯示成黃色。這是由于前者忽略的是整個
類的測試,而后者忽略的只是測試方法。
四、Suite
根據(jù)NUnit文檔的說明,Suite屬性是用來標(biāo)記返回類型為
NUnit.Core.TestSuite的類屬性成員的,該類屬性成員所返回的對象會包含一組測試類,也就是說Suite屬性其實是用來組織一組測試類
的。那么組織這些測試類到TestSuite對象中有何用呢?其實在早期的NUint當(dāng)中,提供有NUnit.TextUI.TestRunner類,該
類有個Run方法,參數(shù)就是TestSuite對象,通過該方法可以在代碼中調(diào)用NUnit環(huán)境,從而運行TestSuite對象中的測試類。不過現(xiàn)在
NUnit似乎已經(jīng)不再使用這種方式了,故此對于Suite屬性這里不再介紹。
五、Category
Category屬性用于將測試類和測試方法分組,從而使測試類和測試方法可以分組進(jìn)行測試。
示例代碼1:
[TestFixture]
[Category("Class1")]
public class Test31
{
[Test]
public void Test()
{}
}
[TestFixture]
[Category("Class1")]
public class Test32
{
[Test]
public void Test()
{}
}
[TestFixture]
[Category("Class2")]
public class Test33
{
[Test]
public void Test()
{}
}
[TestFixture]
[Category("Class2")]
public class Test34
{
[Test]
public void Test()
{}
}
示例代碼2:
[TestFixture]
public class Test3
{
[Test]
[Category("m1")]
public void Test11()
{}
[Test]
[Category("m1")]
public void Test12()
{}
[Test]
[Category("m2")]
public void Test21()
{}
[Test]
[Category("m2")]
public void Test22()
{}
}
測試效果:示例一中編寫了四個類,被分為Class1和Class2兩個組;示例二中編寫了四個方法,被分成了m1和m2兩個組。對于這種分組的測試,要想看出效果,在打開NUnit后,需要先在Categories選項卡中作出選擇,如下圖所示:
可以看到,所有的組默認(rèn)都在上邊的Available
Categories列表框中,選中的組則通過Add按鈕添加到下邊的Selected
Categories列表框中,NUnit允許選中多個。測試完成后對于不想要的組,還可以通過Remove按鈕放回到上邊。選好后,點擊Run按鈕,再
選擇Tests選項卡,效果如下圖:
可以看到,只有與Class1編組對應(yīng)的Test31和Test32這兩個類被測試了。
六、Explicit
Explicit屬性與Ignore屬性有些類似,也是用于對暫時不想運行的測試類或測試方法做忽略的。但與Ignore屬性相比還有兩點差別:一個是
Explicit屬性不需要說明信息,一個是使用Explicit屬性做忽略的類或方法在NUnit中被選中后,將不再被忽略,而是進(jìn)行測試。
示例代碼1:
[TestFixture]
public class Test4
{
[Test, Explicit]
public void TestMethod()
{}
}
示例代碼2:
[TestFixture, Explicit]
public class Test42
{
[Test]
public void TestMethod()
{}
}
測試效果:示例一所忽略的是方法,若不在NUnit中選中該方法,測試后該方法前的圓點為黃色,即在測試中被忽略,若選中了則在測試后顯示為綠色或紅色,這與測試的結(jié)果有關(guān);示例二所忽略的是類,效果與示例一類似。
七、Platform
Platform屬性用來指定運行平臺,若測試類或測試方法運行的平臺與指定的一致則忽略,否則執(zhí)行。
示例代碼1:
[TestFixture]
public class Test5
{
[Test]
[Platform(Exclude="Win98,Linux")]
public void PlatformTest1()
{}
[Test]
[Platform(Exclude=" public void PlatformTest2()
{}
}
示例代碼2:
[TestFixture]
[Platform(Exclude=" public class Test52
{
[Test]
public void PlatformTest1()
{}
[Test]
public void PlatformTest2()
{}
}
測試效果:示例一作用的是方法,測試后PlatformTest1前的圓點為綠色,PlatformTest2前的圓點為黃色,即在測試中被忽略,這是因為我的運行平臺是.net 2.0;示例二作用的是類,因此兩個方法都會被忽略。
此外,NUnit還給出了平臺的參考,摘錄如下:
Win
|
Win32 |
Win32S |
Win32Windows |
Win32NT |
WinCE |
Win95 |
Win98 |
WinMe |
NT3 |
NT4 |
NT5 |
Win2K |
WinXP |
Win2003Server |
Unix |
Linux |
NET |
NET-1.0 |
|
|
|
|
|
|
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=447527