TearDownAttribute (NUnit 2.0 / 2.5)

  本特性在TestFixture内部使用,每个测试方法执行后调用的方法集。也可以在SetUpFixture中使用,在同一命名空间或者程序集种相同的功能。

  NUnit2.5之前,类只能有一个TearDown方法且必须是示例方法。

  从NUnit2.5开始,TearDown方法可以使静态或者示例方法,也可以在一个夹具中定义多个TearDown方法。通常多个TearDown方法只会在不同层级的继承中定义。

  如果所有SetUp方法都正确执行,那么TearDown方法就一定执行。如果SetUp方法失败或者抛出异常则TearDown不会执行。

Example:

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)

  TearDown特性可以从任何基类继承而来。但如果一个基类定义了一个TearDown方法,则这个TearDown方法会在每个继承类的测试方法执行后被调用。

  NUnit2.5之前,你只能够有一个TearDown方法。如果你需要在基类中使用TearDown方法并且在继承类中添加更多的TearDown方法,则需要在手动调用基类的TearDown方法。在NUnit2.5,可以通过在基类定义TearDown方法同时在继承类中定义TearDown方法达到这个目的。

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()
  { /* ... */ }
}
View Code

相关文章: