Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以更改调用单元测试的方式?_C#_Unit Testing_Nunit_Mbunit_Xunit - Fatal编程技术网

C# 是否可以更改调用单元测试的方式?

C# 是否可以更改调用单元测试的方式?,c#,unit-testing,nunit,mbunit,xunit,C#,Unit Testing,Nunit,Mbunit,Xunit,我的猜测是,当前单元测试的语义实际上涉及调用方法,也就是说,如果我有一个方法MyTest(),那么这就是被调用的方法。我的问题是:是否有可能以某种方式更改测试执行方式的管道(最好不重新编译测试运行程序),以便,例如,不直接调用方法,而是通过我提供的包装(即,MyWrapper(MyTest))调用方法 谢谢。这取决于单元测试框架如何提供拦截和扩展能力 大多数框架(MSTest、NUnit等)允许您定义安装和拆卸方法,这些方法保证在测试前后运行 具有更高级的可扩展性机制,您可以在其中定义自定义属性

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


谢谢。

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

大多数框架(MSTest、NUnit等)允许您定义安装和拆卸方法,这些方法保证在测试前后运行

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


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

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

大多数框架(MSTest、NUnit等)允许您定义安装和拆卸方法,这些方法保证在测试前后运行

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


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

如果您使用MBUnit,那么可以通过定义自定义属性来自定义很多内容

最简单的方法是创建TestDecoratorAttribute的子类,覆盖SetUp、TearDown或Execute方法,用您选择的其他逻辑来包装它们

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

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


这里是RepeatAttribute的代码:

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

最简单的方法是创建TestDecoratorAttribute的子类,覆盖SetUp、TearDown或Execute方法,用您选择的其他逻辑来包装它们

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

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


下面是RepeatAttribute的代码:

MyWrapper做什么?在调用测试方法的任何调用之前/之后,都可以使用设置和拆卸。MyWrapper做什么?在调用测试方法的任何调用之前/之后,都可以使用设置和拆卸。哇,将此标记为答案,因为这是我一直在寻找的。谢谢哇,把这个作为答案,因为这就是我要找的。谢谢