NUnit 最新版本展示了 Action 特性,该特性能够编排套件、测试及测试用例上的测试行为。开发人员可以通过在他们的测试项目中应用 Action 特性封装测试活动,并将其应用于类、接口、方法和程序集,来管理 setup(初始化)、teardown(结束清理)和测试端的其他行为。
当某个测试运行时,与之关联的所有 Action 特性会按照其定义顺序被调用两次,一次是 BeforeTest 事件,另一次是 AfterTest 事件。这种模式给予了开发人员对测试的 setup 和 teardown 行为的独立控制。
想要使用Action 特性,开发人员首先要做的是定义新特性,定义的方法有两种:一种是通过实现ITestAction 接口同时继承Attribute 类;另一种是直接继承TestActionAttribute 类。
下面的代码展示了通过实现ITestAction 接口来定义Action 特性:
而下面的代码则通过继承TestActionAttribute 达到了类似的效果:
一旦创建好Action 特性,就可以像任何普通的.NET 特性一样,将其应用于测试项目中的方法、类、接口或程序集上。
NUnit 的输出显示了 Action 特性的组合:
***** BankingTests.AccountTest.DepositFunds<br></br> Before via inheritance Case: AccountTest, from DepositFunds.<br></br> After via inheritance Case: AccountTest, from DepositFunds.<br></br> ***** BankingTests.AccountTest.TransferFunds<br></br> Before via Interface Case: AccountTest, from TransferFunds.<br></br> After via Interface Case: AccountTest, from TransferFunds.
多个 Action 特性可应用于单个目标之上。如果 Action 特性定义在相同的括号里,那么执行顺序为从右至左;而如果它们单独定义,执行顺序则为至下往上。
当使用这种 Action 特性组合时,NUnit 会在相同的测试中执行每一个 Action。
***** BankingTests.AccountTest.TransferWithInsufficientFunds<br></br> Before via Interface Case: AccountTest, from TransferWithInsufficientFunds.<br></br> Before via inheritance Case: AccountTest, from TransferWithInsufficientFunds.<br></br> After via inheritance Case: AccountTest, from TransferWithInsufficientFunds.<br></br> After via Interface Case: AccountTest, from TransferWithInsufficientFunds.
Action 特性可灵活重用应用于单元测试之上的多项功能。组合单元测试设置(setup)和行为(behavior)虽然可以大大提高测试人员的平均生产力和效率,但同时也会对维护这些测试的开发人员隐藏重要的测试逻辑。如果使用不当,会让单元测试变得层化(layered)和钝拙(obtuse)。
除了 Action 特性,NUnit 还发布了共 90 个错误修复以及框架上的一些其他改动。此外,该版本还结束了对旧版 NUnit 和.NET 的支持。随着 2.6 版本的发布,NUnit 将不再支持早期版本引入的约定,而只支持.NET 2.0 及后续更高版本。
查看英文原文: http://www.infoq.com/news/2012/03/NUnit-action-attributes
评论