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特性或者多个类型特性组合,测试用例的顺序是未知的。