如何使用命令行MSTest.exe在我的解决方案中运行所有测试?

时间:2010-10-18 17:25:00

标签: visual-studio-2010 unit-testing command-line

根据MSDN here并讨论here,我们可以使用MSTest.exe从命令行运行测试 - 这比在IDE中运行更快,更快(如果你是致力于像我这样的大解决方案。)

我的问题是如何使用MSTest.exe解决方案中运行所有测试?该命令仅具有/test选项,用于过滤/container选项中指定的一个程序集中的测试。考虑到我可以在我的解决方案中使用所有N测试程序集,我只能想到调用此命令N次(!?)此外,运行后的结果是每个程序集的基础知识,因此不容易得到哪些测试失败/过去了。

如果您了解更好的方法,请分享!谢谢!

4 个答案:

答案 0 :(得分:13)

我使用testmetadata参数完成了此操作并将其指向我的.vsmdi文件。

正如here所述。

E.g:

mstest /testmetadata:mySolution.vsmdi

但请注意testmetadata可能更脆弱(例如empty test lists combined with the Ignore attribute cause "Specified cast is not valid")。 使用包含测试类的所有DLL创建批处理可能是更可靠的替代方法。

答案 1 :(得分:9)

我需要相同的东西,不想安装任何东西或生成vsmdi文件,所以我想出了下面的PowerShell脚本。它在文件夹上的一个命令中运行所有测试,它是子文件夹(不是解决方案,但对我来说很好)

随意建议如何使这个脚本更优雅:

$x = ""; dir *\bin\*test*.dll -Recurse | foreach { $x += "/testcontainer:""$_"" " }; iex "mstest $x"

<强>说明:

  • 通过mstest.exe变量Environment variables添加PATH的路径,否则只需将mstest替换为上面PowerShell脚本中的完整路径。< / p>

    enter image description here

  • 打开PowerShell,粘贴命令。
  • 修改*\bin\*test*.dll以满足您的需求。在当前脚本中,它将递归地获取DLLs文件夹中的所有bin,其中包含文件名中的子字符串“test”。
  • 运行命令!

答案 2 :(得分:5)

您可能希望查看Gallio.Echo测试自动化平台附带的Gallio测试运行器。它是一个免费的(OSS)软件包,包含许多方便的报告工具和测试运行器,支持大多数现有的测试框架(MbUnit,NUnit,MSTest,xUnit等)。

alt text

更具体地说,Gallio.Echo是一个多功能的命令行测试运行器。您可以指定测试程序集,各种过滤器和许多其他选项的列表。 Gallio将测试结果整合到一个报告中(Xml,Html,Zip等)

答案 3 :(得分:-3)

只需使用:

mstest.exe /testcontainer:yourTests.dll /resultsfile:res.trx

它将运行该程序集中的所有测试,并将结果吐出指定的文件。