[翻译]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()
{ /* ... */ }
}
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特性或者多个类型特性组合,测试用例的顺序是未知的。
[翻译]NUnit---TearDown and SetUpFixture and Test Attributes(二十)的更多相关文章
- [翻译]NUnit---SetUp and SetUpFixture and Suite Attributes(十九)
SetUpAttribute (NUnit 2.0 / 2.5) 本特性用于TestFixture提供一个公共的功能集合,在呼叫每个测试方法之前执行.同时也用在SetUpFixture中,SetUpF ...
- [翻译]NUnit---TestCase Attributes(二十一)
TestCaseAttribute (NUnit 2.5) TestCase特性有两个效果,包括标记一个方法使用参数并且在调用的时候提供内置数据.示例如下,本示例会使用不同数据集执行3次: [Test ...
- (翻译)开始iOS 7中自动布局教程(二)
这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...
- [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (二)
3.THROW IN A LOGBACK.XML 现在我们把SLF4J日志配置在logback. <?xml version="1.0" encoding="UTF ...
- 翻译:AKKA笔记 - Actor消息 -1(二)
消息 我们只是让QuoteRequest到ActorRef去但是我们根本没见过消息类! 它是这样的: (一个最佳实践是把你的消息类包装在一个完整的对象里以利于更好的组织) TeacherProtoco ...
- 【翻译二十二】java-并发之集合与原子变量
Concurrent Collections The java.util.concurrent package includes a number of additions to the Java C ...
- 【翻译二十】-java线程池
Thread Pools Most of the executor implementations in java.util.concurrent use thread pools, which co ...
- [翻译]Behavior-Driven Development (BDD)行为驱动开发(二)
测试驱动开发体现了开发人员对软件产品各部分运作方式的理解,而行为驱动开发则关注于开发人员对软件产品最终表现的行为的预期. 行为驱动开发 TDD更像是一种范式而不是一个过程.它描述了一种先编写测试,然后 ...
- [翻译]怎么写一个React组件库(二)
本文同步发布于知乎专栏 https://zhuanlan.zhihu.com/p/27434018,喜欢本文的就去知乎点个赞支持下吧- 引言 该系列文章将通过创建一个组件库来引导你学习如何构建自己的组 ...
随机推荐
- Python3 enumerate() 函数
Python3 enumerate() 函数 Python3 内置函数 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标 ...
- html节点操作与事件
<div id='a' style="width: 500px;height: 500px;background-color: grey;"> </div> ...
- 使用Sql分页方法给Repeater控件分页的方法
页面代码 <div class="bookList"> <asp:Repeater ID="rpBooks" runat="serv ...
- Asp.net中操作Excel的代码解析
一 . 使用Excel对象模型创建Excel文档: 1.创建简单的文档 try { 3 //创建Excel程序对象 Microsoft.Office.Interop.Excel.Application ...
- [leetcode]199. Binary Tree Right Side View二叉树右侧视角
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- [leetcode]416. Partition Equal Subset Sum分割数组的和相同子集
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- 利用telnet模拟http请求
最近准备接触php socket编程,所以准备先巩固以前学到的知识, 这里先简单回顾下 利用telnet 来模拟http请求. 1.先在80端口指向的目录建立http.php 文件 2.在终端输入 t ...
- C#的一些方法读程序转c++
1.Array.Copypublic static void Copy( Array sourceArray, int sourceIndex, Array destinationArray, int ...
- Maven系列(十)发布自己的项目到 Maven 中央仓库
Maven 发布自己的项目到 Maven 中央仓库 可能很多人都在用 Maven 仓库,但是如果要问怎么发布项目到中央仓库,估计很多人都不知道了,下面本篇文章带大家往中央仓库发布一个自己的 Maven ...
- 检测空值,以及会不会出现mapping类型不一致的问题
/// <summary> /// 检测空值,以及会不会出现mapping类型不一致的问题 /// </summary> /// <typeparam name=&quo ...