如何从命令行运行单元测试?

59
我谷歌搜索并找到以下有用的参考资料。目前我想通过命令行运行所有测试(以方便执行和快速性)在以下情况下:
  1. 特定测试(即由标记为 [TestMethod()] 的方法编写的测试)
  2. 类中的所有测试
  3. 所有当前TFS待处理更改的受影响测试。
  4. 所有测试
  5. 除了标记为 [TestCategory("some-category")] 的那些测试之外的所有测试
我不确定如何为我上述需求编写正确的命令。
参考资料:
  1. MSTest.exe http://msdn.microsoft.com/en-us/library/ms182487.aspx
  2. MSTest.exe 的详细选项 http://msdn.microsoft.com/en-us/library/ms182489.aspx
  3. 获取结果 http://msdn.microsoft.com/en-us/library/ms182488.aspx
编辑: 过了一会儿,我发现以下有用的提示:
  1. 使用MSTest.exe在Visual Studio中运行单元测试,该文件位于我的情况下的% ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe
  2. 使用/testcontainer:Path\To\Your\TestProjectAssembly.dll指示测试编写的位置。如果需要,可以指定多个'/testcontainer'选项。
  3. 使用/test:TestFilter来过滤要运行的测试。请注意,此筛选器适用于完整的测试方法名称(即FullNamespace.Classname.MethodName)

1
这非常有价值 - 当我在Visual Studio 2010中运行一些相对占用内存的测试代码(使用约300MB堆内存)时,出现了“内存不足”异常。从命令行运行解决了我的问题。 - dodgy_coder
1
我只得到了“没有可执行的测试”。我猜这对于Visual Studio 2019不起作用。 - Triynko
5个回答

18

目前我可以为我的需求提供一些答案:

  1. 特定测试(即由标记为[TestMethod()]的方法编写的测试)
    使用 MSTest.exe /container:包含特定测试的程序集 /test:特定测试名称

  2. 类中所有测试
    使用 MSTest.exe /container:包含您的类的程序集 /test:完整命名空间的类名
    请注意,/test: 是过滤器,它在过滤时使用类的完整名称。

其他的还不清楚。如果您知道如何做,请讨论一下。


9
容器对我无效,但是 /testcontainer 有效。 - Arpit Khandelwal

15
第4点. 要运行程序集中的所有测试,只需执行以下命令:

mstest /testcontainer:YourCompiledTestAssembly.dll


你知道这个是否也可以包含通配符,用于跨多个程序集分散的测试吗?(我正在尝试为我的 OpenCover 测试创建一个干净的批处理文件) - Robert Sirre
1
@RobertSirre,如果要处理多个程序集,请参见https://dev59.com/Wm865IYBdhLWcg3wKLJP - Michael Freidgeim
@MichaelFreidgeim,那里没有给出真正干净的解决方案(我更喜欢不使用Gallio,以免添加更多的软件),也没有使用已弃用的vsmdi文件。后来我发现,MSTest接受指定/testcontainer多次。 - Robert Sirre

5

针对问题:

5 所有测试,除了标记为类别[TestCategory("some-category")]的测试

使用:

mstest.exe /testcontainer:yourTests.dll  /category:"!some-category"

如果您需要排除多个类别,请使用:
mstest.exe /testcontainer:yourTests.dll  /category:"!group1&!group2"

参考: /category筛选器


3
你可能会对Gallio捆绑包感兴趣。它提供了一个免费的通用自动化平台来运行你的测试(MSTest,MbUnit,NUnit,xUnit等),并带有各种测试运行器(GUI,命令行,PoSh,第三方工具的插件等)。
特别是你可能想使用 Gallio.Echo,它是一个不错的命令行测试运行器:

Gallio.Echo

Gallio测试运行器还具有过滤功能,可以仅运行您的一部分单元测试(例如,按类别、按装置等)(链接到筛选能力页面)


除非您正在使用Nunit或MsUnit测试,否则不支持按类别进行过滤。 - DoodleKana

0

**因我遇到的错误而添加此内容。 要运行所有测试,请使用'''vstest.console.exe .\x64\Release\UnitTesting.dll''' vstest.console.exe不被弃用,因此您不需要/nologo抑制。

如果需要,还可以使用--TestCaseFilter|/TestCaseFilter:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接