如何在Visual Studio Test Runner中排除某些测试?

时间:2012-09-25 11:29:20

标签: visual-studio unit-testing visual-studio-2012 tdd coded-ui-tests

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

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

例如,我想排除CodedUItests

[CodedUITest]
public class SearchViewTests

...或排除给定TestCategory中的测试:

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

我特别想排除编码的UI测试,因为它们会破坏我继续工作的能力,而所有其他测试都会在后台运行而不会打扰我。

最初这个问题是关于Visual Studio 2012的,所以我更喜欢那个版本以及更高版本的解决方案。

7 个答案:

答案 0 :(得分:62)

TL; DR版本:

Test explorer showing -Trait:"CategoryName" filter

其他答案对变通办法和最新Traits选项的使用进行了评论。但是,没有人告诉您如何专门排除特征的测试。为此,只需使用-(减号)来否定搜索框中的过滤器,例如:

-Trait:"DatabaseIntegration"

这将排除具有该特征的所有测试。 MSDN documentation on these features有以下解释:

  

要排除过滤器结果的子集,请使用以下语法:

     

FilterName:"Criteria" -FilterName:"SubsetCriteria"

     

例如,

     

FullName:"MyClass" - FullName:"PerfTest"

     

返回包含" MyClass"的所有测试。在他们的名字中除了那些也包括" PerfTest"以他们的名义。

答案 1 :(得分:8)

我发现工作的唯一“解决方案”(或更好的解决方法)是指定“FullName”过滤器。基本上我通常构建我的解决方案,如

  • 项目A
  • ProjectA.UnitTests
  • ProjectA.IntegrationTests

等等。现在我可以在测试资源管理器中指定一个过滤器,如FullName: "UnitTests",这似乎有用 (我希望能够在搜索名称中使用正则表达式,但似乎不支持它。)

enter image description here

答案 2 :(得分:7)

Visual Studio 2012 Update 1 CTP添加了对按项目和类别(特征)分组到测试资源管理器的支持。 http://blogs.msdn.com/b/visualstudioalm/archive/2012/10/08/visual-studio-2012-update-1-ctp.aspx http://go.microsoft.com/fwlink/?LinkId=268021

答案 3 :(得分:3)

您可以在单位文本浏览器中使用搜索过滤器。

unit test explorer

在2012年附带的新Test Explorer中,您可以通过“测试结果”,“FileName”等对测试进行分组,但在RTM构建组中/通过“TestCategory”搜索不存在于测试资源管理器中。但是,在VS2012中,命令行和TeamBuild中有一个基于TestCategory的过滤器(使用TestCaseFilter在VS 2012 RC中运行选择性单元测试)。

来自VS开发团队的成员,他们了解这个缺失功能​​的重要性。它在积压中,它应该在furutre构建/更新中可用。

以下博客提供了更多详细信息:http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx

答案 4 :(得分:3)

您可以在Test Explorer上应用过滤器。特征:“UnitTest”此过滤器将仅使用TestCategory(“UnitTest”)属性拾取测试而忽略其他测试。

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:0)

你看过这篇文章吗? How to: Group and Run Automated Tests Using Test Categories

我还没有尝试过VS 2012,但它仍然有效。据我所知,没有对TFS的引用,所以这应该指向正常的VS测试运行器。