[翻译]NUnit---SetUp and SetUpFixture and Suite Attributes(十九)
SetUpAttribute (NUnit 2.0 / 2.5)
本特性用于TestFixture提供一个公共的功能集合,在呼叫每个测试方法之前执行。同时也用在SetUpFixture中,SetUpFixture在相同命名空间或者程序集也实现相同的作用。
在NUnit2.5之前,类必须只能有一个SetUp方法且必须是一个实例方法。
从NUnit2.5开始,SetUp方法可以使一个静态或者实例方法,而且在一个Fixture可以多次使用。通常多个Setup方法定义在不同层级的继承。
如果一个Setup方法失败或者抛出一个异常,测试不会执行,同时产生一个失败或者错误。
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(继承)
可以从任何基类继承到SetUp特性功能。但是,如果一个基类已经定义过一个Setup方法,这个方法在继承类的每个测试方法前都会被执行。
在NUnit2.5之前,只允许用于一个Setup方法。如果你想在基类中有Setup功能在继承类中添加更多的Setup功能,需要手动的调用基类Setup方法。
在NUnit2.5中,你可以在基类和继承类中定义Setup方法达到相同的目的。NUnit会在调用继承类Setup方法之前调用基类的Setup方法。
Note:尽管可以再一个类中可以多次定义Setup方法,但还是尽量这样使用。因为同一个类的的Setup方法执行顺序是不确定的。
SetUpFixtureAttribute (NUnit 2.4)
本特性标记一个类包含setup或teardown方法,为相同命名空间下的所有测试夹具提供相关功能。这个类最多包含一个SetUpAttribute标记的方法和TearDownAttribute标记的方法。
使用SetUpFixture修饰的类有如下限制条件:
必须有一个public输出,否则NUnit不能发现。
必须有一个默认构造函数,否则Unit不能进行构造。
在SetUpFixture中的SetUp方法在同一命名空间中的任何fixtures执行时都会执行一次。TearDown方法在所有fixtures执行完毕之后执行一次。在下面示例中,RunBeforeAnyTests()在NUnit.Tests命名空间中的所有测试用例或者setup方法之前执行;RunAfterAnyTests()在NUnit.Tests命名空间所有测试用例执行完毕和继承类中的teardown方法执行完毕之后执行。
在一个命名空间中只能创建一个SetUpFixture类。在任何命名空间之外的SetUpFixture为整个程序集提供SetUp 和TearDown 方法。
Example:
namespace NUnit.Tests
{
using System;
using NUnit.Framework; [SetUpFixture]
public class MySetUpClass
{
[SetUp]
RunBeforeAnyTests()
{
// ...
} [TearDown]
RunAfterAnyTests()
{
// ...
}
}
}
SuiteAttribute (NUnit 2.0/2.4.4)
本特性用于定义测试子集在命令行模式下使用/fixture选项时执行。在NUnit2.0中引入用于取代老式从TestSuite类继承的方式。
最初因为基于命名空间的动态创建,NUnit开发者相信Suite机制的需求会减少(Suite提供向后兼容)。但事实证明这是错误的。套件在现在还有许多人使用,所有我们努力恢复他们的可用性。套件机制依赖一个SuiteAttribute标记的静态属性。经典模式从2.0开始支持,属性返回一个即将执行的TestSuite类型。
老式方法:
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
using NUnit.Core; public class AllTests
{
[Suite]
public static TestSuite Suite
{
get
{
TestSuite suite = new TestSuite("All Tests");
suite.Add(new OneTestCase());
suite.Add(new Assemblies.AssemblyTests());
suite.Add(new AssertionTest());
return suite;
}
}
}
}
这个方法有一个严重问题:它需要引用用例测试通常不会引用的nunit.core程序集。这意味着测试用例如果不重新编译就不能够在不同版本NUnit中进行移植。在某些特殊情况下,引入多个版本的core程序集到导致NUnit不能正常运行。
从NUnit2.4.4开始,提供一个新的可以方法。用SuiteAttribute标记的属性可以返回一个包含测试夹具对象或者类型的集合。如果是Type,NUnit会用这个Type创建一个对象。如果是对象,则被认为是预先创建的对象。这允许参数化构造函数或者可赋值属性能够作为夹具。
通过SuiteAttribute创建的测试套件可以包含TestFixtureSetUp 和TestFixtureTearDown方法,执行一次性的setup and teardown方法。
New Approach - Fixture Objects
namespace NUnit.Tests
{
using System;
using NUnit.Framework; private class AllTests
{
[Suite]
public static IEnumerable Suite
{
get
{
ArrayList suite = new ArrayList();
suite.Add(new OneTestCase());
suite.Add(new AssemblyTests());
suite.Add(new NoNamespaceTestFixture());
return suite;
}
}
}
}
New Approach - Fixture Types
namespace NUnit.Tests
{
using System;
using NUnit.Framework; private class AllTests
{
[Suite]
public static IEnumerable Suite
{
get
{
ArrayList suite = new ArrayList();
suite.Add(typeof(OneTestCase));
suite.Add(typeof(AssemblyTests));
suite.Add(typeof(NoNamespaceTestFixture));
return suite;
}
}
}
}
限制
NUnit支持自定义套件有如下两个限制:
1.在使用新方法时,不能在测试套件中包含测试用例。如果想要这么达到这个目的,必须使用旧方法并创建一个从NUnit.Core.TestCase继承的对象。另:因为需要引用core程序集故不推荐这样使用。
2.测试套件不会在GUI中显示,也在任何执行方式(GUI、控制台)中不会自动自行。套件机制的历史目的是在顶层执行提供一个聚合测试。因此,只在控制台或者GUI命令行模式下/fixture选项执行。
目前正在评估在将来的NUnit版本中移除这些限制的方法。
小记:距离上次翻译差不多半年了,期间也想翻译几篇,不是没有时间,而且人的惰性使然。看书的那段时间天天都看,一旦懒惰不看书,想要再拿起来就有一个声音念叨明天再看或者某个时间后再看。提醒自己:坚持不懈很重要,不管是为了实际的money还是为了发展,书不可不看。
[翻译]NUnit---SetUp and SetUpFixture and Suite Attributes(十九)的更多相关文章
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12翻译——第十九章. Gradle 守护进程
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十九章. IDEA 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- [翻译]NUnit---TearDown and SetUpFixture and Test Attributes(二十)
TearDownAttribute (NUnit 2.0 / 2.5) 本特性在TestFixture内部使用,每个测试方法执行后调用的方法集.也可以在SetUpFixture中使用,在同一命名空间或 ...
- [翻译]NUnit---Property and Random Attributes(十四)
小记:由于工作琐碎,没得心情翻译而且也在看<CLR vis C#>,所以断更了差不多5个月,现在继续翻译,保证会翻译完成,不会虎头蛇尾. 另:NUnit已经更新到2.6.3版本,虽然正在开 ...
- [翻译]NUnit---Range and Repeat Attributes(十五)
RangeAttribute (NUnit 2.5) Range特性用于为参数话测试方法的参数的值范围指定一个值,与Random特性一样,NUnit会将每个参数的值组合为一些了测试用例,所以如果为一个 ...
- [翻译]NUnit---Sequential and SetCulture and SetUICulture Attributes(十八)
Sequential特性用于在测试用例上指定NUnit通过为测试提供的参数选择单一值生产测试用例,并且不会生产额外的组合. Note:如果参数数据由多个特性提供,那么NUnit使用数据项的顺序是随机的 ...
随机推荐
- U盘做启动盘后,恢复原始容量
借助u盘进行系统安装时,可能会对u盘进行分区.u盘分区后,再连接至电脑,就有很大程度的可能是一部分区域不能显示.u盘原本的大小被占据,显示的大小是比之前少了的,并且这些少掉了的内存也无法再使用.只有对 ...
- visual code golang配置
前言 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org), 导致一些包无法安装,最终会导致环境搭建失败,跟据这个教程几步,我们将可以快速的构建golang ...
- lambda表达式&map&filter&yield
一.先来看下lambda表达式 1.lambda表达式其实很简单,他是简单的函数的变种,只有三部分组成,之前老师没有讲清楚,今天看书,终于明白了,写个博客记录下 lambda关键字+参数+返回值,参数 ...
- Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串
Page<User> page = new Page<>(); User user = new User(); user.setAge(20); ...
- Broadcast总结 service
有时候离开应用就会接收不到系统的广播是因为系统默认发送的广播都会有一个参数 ntent startIntent = new Intent();startIntent.putExtra("pk ...
- WebMagic写的网络爬虫
一.前言 最近因为有爬一些招聘网站的招聘信息的需要,而我之前也只是知道有“网络爬虫”这个神奇的名词,具体是什么.用什么实现.什么原理.如何实现比较好都不清楚,因此最近大致研究了一下,当然,研究的并不是 ...
- linux 下 php 安装 libevent
一.安装libevent库 1.到libevent官网下载安装源码 http://libevent.org/ 如:libevent-2.0.22-stable.tar.gz 2.解压源码包 > ...
- 前端学习之JavaScript
JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Net ...
- hook进程
https://www.cnblogs.com/Leo_wl/p/3311279.html https://blog.csdn.net/u013761036/article/details/65465 ...
- 递归生成treeview树形节点(没有用递归函数之后会有补充,这里只用系统的内置方法去生成)
using System;using System.Collections.Generic;using System.ComponentModel;using System.IO;using Syst ...