是否有以编程方式运行Visual Studio单元测试的API?

时间:2010-01-13 07:04:51

标签: visual-studio unit-testing mstest

是否有以编程方式运行Visual Studio单元测试的API?

使用Process.Start()运行MSTests.exe在当前方案中不起作用。我正在寻找的是像NUnit SimpleTestRunner。

有什么想法吗?

/埃里克

4 个答案:

答案 0 :(得分:10)

你是正确的,因为mstest框架没有公共API。我有一天写了mstest的手动替代品,看它有多难,而且它不像它看起来那么简单(特别是如果你想利用多个CPU核心),所以要注意沿着这条路走。

我个人总是以编程方式运行mstest.exe,然后解析生成的.trx XML文件。是否有任何特殊原因导致您无法使用Process.Start来运行它?

P.S。如果你传递/noisolation命令行参数,mstest.exe的一些奇怪的行为就会被解决 - 如果你有这种感觉,请给它一个去: - )


更新:Erik提到他想在当前线程中运行测试API,以便为全球化问题设置线程文化。

如果在调试器下运行单元测试,您会注意到mstest创建了一堆线程,并在不同的线程中运行所有测试,因此即使您可以访问API,这也不太可能。

我建议做的是:

  1. 从您的测试“runner”应用程序中,设置一个环境变量
  2. 运行mstest,将其指向特定测试
  3. 添加[ClassInitialize](或[TestInitialize])方法,该方法读取此环境变量并设置文化
  4. 利润!

答案 1 :(得分:3)

在用反射器深入潜入MSTest.exe并进一步深入Visual Studio单元测试堆栈之后,我发现MSTest使用的API被密封并变为私有,因此无法从外部使用。< / p>

答案 2 :(得分:0)

为什么不使用Reflector并查看NUnit SimpleTestRunner如何运行测试......然后使用这种技术...

答案 3 :(得分:0)

您可以使用Microsoft REST API for TFS来运行ms测试。请参阅文档here

我已经链接到“调用Rest API”,以便您可以看到如何调用TFS的REST API之一。

请注意,如果您的测试与构建相关联,则每次构建排队时它们都应自动运行。

以下是Run Functional Tests的链接。

我还发现了一篇关于使用TFS SDK API运行测试的文章。这也是该链接:Link to API Article