TearDownAttribute (NUnit 2.0 / 2.5)html
本特性在TestFixture內部使用,每一個測試方法執行後調用的方法集。也能夠在SetUpFixture中使用,在同一命名空間或者程序集種相同的功能。程序員
NUnit2.5以前,類只能有一個TearDown方法且必須是示例方法。dom
從NUnit2.5開始,TearDown方法可使靜態或者示例方法,也能夠在一個夾具中定義多個TearDown方法。一般多個TearDown方法只會在不一樣層級的繼承中定義。ide
若是全部SetUp方法都正確執行,那麼TearDown方法就必定執行。若是SetUp方法失敗或者拋出異常則TearDown不會執行。測試
Example:spa
namespace NUnit.Tests { using System; using NUnit.Framework; [TestFixture] public class SuccessTests { [SetUp] public void Init() { /* ... */ } [TearDown] public void Cleanup() { /* ... */ } [Test] public void Add() { /* ... */ } } }
繼承(Inheritance)code
TearDown特性能夠從任何基類繼承而來。但若是一個基類定義了一個TearDown方法,則這個TearDown方法會在每一個繼承類的測試方法執行後被調用。htm
NUnit2.5以前,你只可以有一個TearDown方法。若是你須要在基類中使用TearDown方法而且在繼承類中添加更多的TearDown方法,則須要在手動調用基類的TearDown方法。在NUnit2.5,能夠經過在基類定義TearDown方法同時在繼承類中定義TearDown方法達到這個目的。blog
Note:儘管能夠再同一個類中定義多個TearDown方法,但不推薦這麼作(由於TearDown同一類多個TearDown方法的執行順序是不定的)。排序
TestAttribute (NUnit 2.0 / 2.5 / 2.6)
本特性用於在TestFixture類中標記一個方法做爲一個測試用例。NUnit前期版本保持向後兼容,一個測試方法也能夠經過「test"4個字符來辨認。這個能夠經過配置文件中的選項實現。
NUnit2.5以前,測試方法形如:
public void MethodName()
NUnit2.5開始,靜態方法也能夠用做測試用例。
public static void MethodName()。
另外,在NUnit2.5中,測試方法能夠有參數和返回值,NUnit提供參數值以及怎樣處理返回值的方法。獲取更多信息,參考ParameterizedTests.
參數化測試方法能夠是泛型,NUnit可以從提供的數據類型推斷出合適的參數類型。從NUnit2.6.2開始,.NET4.5版本的測試方法能夠標記爲asyc,NUnit在記錄結果前等待方法執行完畢而且繼續下一個測試。若是沒有返回值,Asyc測試方法可能返回void或者Task。若是返回一個T類型的值,Asyc方法返回一個Task<T>值。
若是程序員用不正確的簽名標記一個測試方法,測試方法被認爲不可執行並在GUI或者控制檯界面顯示結果。在GUI,這些測試標記爲紅色。
在下面的示例中爲NUnit無參數測試用例
namespace NUnit.Tests { using System; using NUnit.Framework; [TestFixture] public class SuccessTests { [Test] public void Add() { /* ... */ } public void TestSubtract() { /* backwards compatibility */ } } } Imports System Imports Nunit.Framework Namespace Nunit.Tests <TestFixture()> Public Class SuccessTests <Test()> Public Sub Add() ' ... End Sub End Class End Namespace #using <Nunit.Framework.dll> using namespace System; using namespace NUnit::Framework; namespace NUnitTests { [TestFixture] public __gc class SuccessTests { [Test] void Add(); }; } #include "cppsample.h" namespace NUnitTests { // ... } package NUnit.Tests; import System.*; import NUnit.Framework.TestFixture; /** @attribute NUnit.Framework.TestFixture() */ public class SuccessTests { /** @attribute NUnit.Framework.Test() */ public void Add() { /* ... */ } }
Parameterized Tests
NUnit2.5支持帶參數的測試用例。測試方法能夠帶參數而且有多個特性能夠指定NUnit提供參數。
多個參數集合會產生多個測試用例。在加載測試用例時建立全部參數,故若是須要在GUI顯示並可選。
一些特性運行指定內置參數(直接在聲明特性時指定),其餘特性須要使用一個方法、屬性、字段來保存參數。另外,一些特性爲全部測試用例的所有參數提供數據,一些爲單個參數提供數據。如此,產生四組特性以下:
Complete Test Cases | Data for One Argument | |
---|---|---|
Inline | TestCaseAttribute | RandomAttribute RangeAttribute ValuesAttribute |
Separate | TestCaseSourceAttribute | ValueSourceAttribute |
另外,當數據指定爲單個參數,能夠在方法上添加特殊的特性告訴NUnit怎樣合併參數。當前提供以下特性:
執行順序
在NUnit2.5,單個測試用例按照字母順序排序並執行。在NUnit2.5.1,單個測用例再也不排序,按照NUnit發現的順序執行。這個執行順序不是按照特性的詞法順序,每每由於不一樣的編譯器和CLR版本不一樣而不一樣。
順序規則以下:
1.若是在一個TestCaseSource特性中指定全部參數值,測試用例的排序保存不變。
2.若是每一個參數有一個Values, ValueSource ,Range特性並指定Sequential策略,或職業一個參數;保持排序不變
3.在全部測試用例中,包括使用多個TestCase特性或者多個類型特性組合,測試用例的順序是未知的。