是否可以改变调用单元测试的方式?

时间:2009-10-04 05:47:15

标签: c# unit-testing nunit mbunit xunit

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

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

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

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