[翻译]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使用数据项的顺序是随机的 ...
随机推荐
- java swing:文本框添加滚动条
有几点要注意: 1.默认的滚动条,仅在输入的文本超过文本框时才会显示..没有超过文本框是不会显示的: 2.设置矩形大小,是在滚动条上设置,而不是在文本框上设置: 示例代码如下: public clas ...
- A* 算法详解
最近刷bin巨的搜索进阶专题,做到一个需要A*算法来解决的题,于是开始学A*算法,十分有用处的算法,虽然看上去听复杂的,但其实原理很容易理解,下面转自一篇文章,讲得真的很好. 转:https://ww ...
- Jiu Yuan Wants to Eat(树链剖分+线段树延迟标记)
Jiu Yuan Wants to Eat https://nanti.jisuanke.com/t/31714 You ye Jiu yuan is the daughter of the Grea ...
- pymysql基本的使用方法
1.导入模块+创建连接 import pymysql # 1.通过python去连接数据库 conn = pymysql.connect(host="127.0.0.1",port ...
- Jmeter元件作用域
转载自飞测团队
- php中session入memcached
1.使用memcache扩展,提供的session处理器(session.save_handler) memcahe即可. 通过存储位置配置项(session.save_path),设置使用的memc ...
- 《Ubuntu标准教程》学习总结
第6章 Shell Shell就是一个命令解释器,负责完成用户与内核之间的交互. 目前流行电Shell主要有:Bourne Shell( sh ).Bourne Again Shell( Bash ) ...
- 合成冷色黑暗恐怖魔法师图片的PS教程
教程主要使用Photoshop合成黑暗风格的魔法师施法场景,整体的场景效果以冷色风格为主,加上素材的叠加完成最终效果图,希望朋友可以喜欢.效果图: 先把背景拖进去,用工具吧字母弄掉. 加一个调色图层 ...
- html 5 如何限制上传的文件类型 (uploadifive)
可以直接设置input标签的accept属性来限制上传文件的类型 <input type="file" accept="application/msword&quo ...
- 强制另存文件和加扩展名的代码c#
强制另存为文件+扩展名的代码using System;using System.Collections.Generic;using System.Linq;using System.Web; name ...