【问题标题】:Is it possible to change the way unit tests are invoked?是否可以更改调用单元测试的方式?
【发布时间】:2010-12-03 16:41:48
【问题描述】:

我的猜测是,当前单元测试的语义涉及实际调用方法,即,如果我有一个方法 MyTest(),那么这就是被调用的方法。我的问题是:是否有可能以某种方式更改测试执行方式的管道(最好不重新编译测试运行程序),这样,比如说,不是直接调用该方法,而是通过我提供的包装器调用它(即@987654322 @)?

谢谢。

【问题讨论】:

  • MyWrapper 是做什么的?您可以在调用任何测试方法之前/之后使用 Setup & TearDown。

标签: c# unit-testing nunit mbunit xunit


【解决方案1】:

如果您使用 MbUnit,那么您可以通过定义自定义属性来自定义很多东西。

执行此操作的最简单方法是创建 TestDecoratorAttribute 的子类并覆盖 SetUp、TearDown 或 Execute 方法,以使用您选择的其他逻辑包装它们。

但是,如果您需要更精细的控制,您可以改为创建 TestDecoratorPatternAttribute 的子类,并使用逻辑覆盖 DecorateTest 方法以添加额外的测试操作或测试实例操作。

例如,MbUnit [Repeat] 属性通过使用循环和一些额外的簿记来包装测试的主体运行操作(运行测试的所有阶段)来重复运行测试。

RepeatAttribute 的代码如下:http://code.google.com/p/mb-unit/source/browse/trunk/v3/src/MbUnit/MbUnit/Framework/RepeatAttribute.cs

【讨论】:

  • 哇,将其标记为 the 答案,因为这是我一直在寻找的。谢谢!
【解决方案2】:

这取决于单元测试框架如何提供拦截和扩展能力。

大多数框架(MSTest、NUnit 等)允许您定义保证在测试前后运行的 Setup 和 Teardown 方法。

xUnit.NET 具有更高级的可扩展性机制,您可以在其中定义自定义属性,您可以使用这些属性来装饰您的测试方法以更改它们被调用的方式。例如,有一个 TheoryAttribute 允许您定义参数化测试。

我不知道MBUnit,所以我不能说它是否支持这些场景。

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多