• [翻译]NUnit---TearDown and SetUpFixture and Test Attributes(二十)


    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

      

    Parameterized Tests

      NUnit2.5支持带参数的测试用例。测试方法可以带参数并且有多个特性可以指定NUnit提供参数。

      多个参数集合会产生多个测试用例。在加载测试用例时创建所有参数,故如果需要在GUI显示并可选。

      一些特性运行指定内置参数(直接在声明特性时指定),其他特性需要使用一个方法、属性、字段来保存参数。另外,一些特性为所有测试用例的全部参数提供数据,一些为单个参数提供数据。如此,产生四组特性如下:

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

  • 相关阅读:
    Spring Bean的生命周期
    使用docker安装虚拟机并打开ssh连接
    查看/设置JVM使用的垃圾收集器
    使用Apollo动态修改线上数据源
    java8之lambda表达式
    Java8之Stream
    @Bean 的用法
    Java中的Filter过滤器
    详解tomcat的连接数与线程池
    什么是ClassLoader
  • 原文地址:https://www.cnblogs.com/kim01/p/3773058.html
Copyright © 2020-2023  润新知