如何在Visual Studio测试运行器中排除某些测试?

37

我在某些测试中有属性,理想情况下不希望每次构建都运行。我的大多数测试都是普通的单元测试,我确实希望它们在每次构建时运行。

那么:如何通过类别或项目类型排除测试?

例如,我想排除CodedUItests

[CodedUITest]
public class SearchViewTests

...或者在特定的TestCategory中排除测试:

[TestMethod]
[TestCategory("Database Integration")]
public void ContactRepositoryGetByIdWithIdExpectCorrectContact()

我特意想排除编码的UI测试,因为它们会打断我的工作能力,而其他所有的测试则可以在后台愉快地运行而不会干扰我。

最初这个问题是关于Visual Studio 2012的,所以我更希望能有适用于该版本及更高版本的解决方案。

7个回答

77

TL;DR 版本:

Test explorer showing -Trait:"CategoryName" filter

其他答案已经提到了解决方法和使用更近期的Traits选项。然而,它们并没有告诉你如何具体地排除一个 Trait 的测试。要做到这一点,只需在搜索框中使用“-”(减号)来否定筛选条件,例如:

-Trait:"DatabaseIntegration"

这将排除所有具有该特征的测试。关于这些功能的MSDN文档给出了以下解释:

要排除筛选结果的一个子集,请使用以下语法:

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例如,

FullName:"MyClass" - FullName:"PerfTest"

返回所有测试名称中包含“MyClass”的测试,但不包括那些名称中同时包含“PerfTest”的测试。


我希望它有一个通配符功能-trait:“%Criteria”,但是遗憾的是这只是一厢情愿的想法。 - rjt011000

8

7
我找到的唯一“解决方案”(或更好的解决方法)是指定一个“FullName”过滤器。基本上,我通常会将我的解决方案结构化为
  • ProjectA
  • ProjectA.UnitTests
  • ProjectA.IntegrationTests
等等。现在我可以在测试资源管理器中指定一个过滤器,例如FullName: "UnitTests",这似乎有效。
(我原本希望能够在搜索名称中使用正则表达式,但似乎不支持。) enter image description here

Todd的即将推出的新功能笔记是个好消息 - 但这个临时解决方案对我来说最为实用,因为我可以通过过滤器FullName:"MyProject.Integration.Tests"只查看集成测试,而通过FullName:"MyProject.Tests"查看单元测试。 - Fenton

3

在测试资源管理器中,您可以应用一个过滤器。Trait:“UnitTest”这个过滤器将只选择带有TestCategory(“UnitTest”)属性的测试,忽略其他测试。


3
您可以在单元测试资源管理器中使用搜索过滤器。
在2012年发布的新版测试资源管理器中,您可以按“测试结果”、“文件名”等对测试进行分组,但在RTM版本中,无法通过“TestCategory”对测试进行分组/搜索。但是,在VS2012中,基于命令行和TeamBuild的TestCategory筛选器(在VS 2012 RC中运行选择性单元测试)提供了一个筛选器。
来自VS dev团队成员的消息称,他们理解这个缺失功能的重要性。它已经在待办事项中,并且应该在未来的构建/更新中可用。
以下博客提供更多细节:http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx

2

来晚了

我也遇到了同样的问题,当运行解决方案中所有单元测试时,所有开发人员都面临着破坏性的CodedUI。我的解决方法是将以下内容添加到CodedUI项目的AssemblyInitializer:

    if(!ConfigurationManager.AppSettings["MachinesToRunCodedUI"].Split(',').Contains(Environment.MachineName))
        Assert.Inconclusive("CodedUI Tests are skipped.");

只有当一台机器是MachinesToRunCodedUI列表的一部分时,它才会运行CodedUI测试。


0

2
我认为这不在VS2012中 - 测试视图已被测试资源管理器取代,并且似乎没有类别感知功能 - 虽然Cybermaxs的回答表明VS Dev团队可能会添加它。 VS2012等效文章表明目前仅可通过命令行获得:http://msdn.microsoft.com/en-us/library/dd286683%28v=vs.110%29.aspx - Fenton

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