1

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

谢谢。

4

2 回答 2

3

如果您使用 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

于 2009-10-04T11:05:57.900 回答
2

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

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

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

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

于 2009-10-04T06:29:28.380 回答