NUnit,MSTest和xUnit的选择性测试运行器

时间:2013-11-23 10:00:07

标签: c# unit-testing nunit mstest xunit.net

我想创建一个自定义的TestRunner,允许对以下单元框架运行单元测试:

  • MSTest的
  • NUnit的
  • 的xUnit

此自定义测试运行器应该具有定义运行测试的条件的可能性。例如:

  • 运行特定测试方法(按名称)
  • 针对特定测试方法运行测试方法
  • 针对特定测试类运行测试方法

我找到了NUnit的解决方案,在xUnit中我应该实现ITestRunner。但是你知道如何从代码中为MSTest运行测试吗?

您知道如何定义标准以仅运行填充上面定义的标准的方法吗?

2 个答案:

答案 0 :(得分:5)

您可以尝试Fixie(仍处于开发阶段)。它允许您编写自定义约定以确定什么是测试,无论使用何种单元测试框架。例如,您可以编写一个约定,将以“Tests”结尾的类中的所有void公共方法标识为单元测试,而不管属性如何等等(事实上,这是它的默认约定)。它非常灵活。要编写自定义约定,需要在程序集中实现Convention类,Fixie将发现它。阅读它的文档以获取更多信息,并查看项目中包含的优秀样本和测试。

它已通过TestDriven.net与visual studio集成。如果你没有,那么你需要通过它的控制台运行它。

答案 1 :(得分:2)

感谢您回复我的评论。我想我可以建议你一个可能的解决方案,我自己也没试过。但我相信这是可行的。这个建议更像是一种程序化方法,与您提到的每个测试框架(NUnit,MSTest,xUnit)提供的一些内置命令行选项相混合。

如果所有这些测试框架都能够执行测试,无论是选择性地,作为一个组,还是通过命令行作为整个测试套件,您始终可以使用Console App,使用预定义参数来执行这些测试如你所愿。

据我所知,所有这些测试框架都提供了命令行测试运行器和选项。但根据它们提供的选项,它们可能会有所不同。

首先要分析每个测试框架的能力提供命令行参数,以便您可以根据需要执行测试。

MSTest.exe Command Line提供了一些您可能想要查看的选项。

  • / test

  • /分类

您可以查看一些选项。

NUnit console也提供了一些选择。但我还没有考虑过这个。

XUnit has a Console Test runner您可以查看更多内容(即xunit.console MyTestLibrary.dll)。

值得注意的是,xUnit.NET和NUnit都是可扩展的。因此,如果您没有所需的选项,可以考虑扩展框架提供的选项。甚至沿着创建自己的控制台跑步者的道路并不那么难。与MSTest不同,这两个框架都是开源的,因此您可以看到它们提供的选项。鉴于有选择地运行测试是关键要求,我认为这些框架具有内置选项,您无需进行太多自定义。

一旦确定了这些框架的控制台对应项的功能,您就可以继续创建客户端应用程序/控制台应用程序,您可以指定要有选择地运行的测试。此客户端应用程序将有选择地向每个运行程序提供测试并执行Console.exe。这应该选择性地运行您的测试。您可以通过提供某种可配置的元数据/清单文件来进一步自动化。例如,您可以指定要从元数据或清单文件运行的各种测试,并且控制台运行器将从元数据文件中读取。

根据您的客户端应用配置,如果它是控制台应用,您也可以通过构建系统调用。

希望这会指向你想要实现的方向。