【问题标题】:How to exclude certain tests in the Visual Studio Test Runner?如何在 Visual Studio 测试运行程序中排除某些测试?
【发布时间】:2012-09-25 11:29:20
【问题描述】:

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

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

例如,我想排除CodedUItests

[CodedUITest]
public class SearchViewTests

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

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

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

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

【问题讨论】:

  • 你在使用构建服务器吗?
  • 这是 Visual Studio 2012 中内置的本地测试运行程序 - 因此运行我尚未提交的代码。我知道如何使用 MSBuild 做我想做的事,但不知道如何使用本地 Test Runner。

标签: c# visual-studio unit-testing visual-studio-2012


【解决方案1】:

TL;DR 版本:

其他答案评论了解决方法和使用更新的Traits 选项。但是,没有一个能告诉您如何专门排除特征测试。为此,只需使用-(减号)来否定搜索框中的过滤器,例如:

-Trait:"DatabaseIntegration"

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

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

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例如,

FullName:"MyClass" - FullName:"PerfTest"

返回名称中包含“MyClass”的所有测试,但名称中还包含“PerfTest”的测试除外。

【讨论】:

  • 我希望它有一个通配符功能 -trait:"%Criteria" 但可惜是一厢情愿
【解决方案2】:

我发现唯一可行的“解决方案”(或更好的解决方法)是指定一个“FullName”过滤器。基本上我通常会像

那样构建我的解决方案
  • 项目A
  • ProjectA.UnitTests
  • ProjectA.IntegrationTests

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

【讨论】:

  • Todd 关于即将推出的功能的说明是个好消息 - 但这是最​​适合我的临时解决方案,因为我可以过滤 FullName:"MyProject.Integration.Tests" 以仅查看集成测试和 FullName:"MyProject.Tests" 以查看单元测试。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您可以在 Unit Text Explorer 中使用搜索过滤器。

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

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

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

    【讨论】:

      【解决方案5】:

      您可以在测试资源管理器上应用一个过滤器。 Trait:"UnitTest" 这个过滤器将只拾取具有 TestCategory("UnitTest") 属性的测试,而忽略其他属性。

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          【解决方案7】:

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

          我还没有在 VS 2012 上尝试过这个,但它仍然可能有效。据我所知,没有对 TFS 的引用,所以这应该指向普通的 VS 测试运行器。

          【讨论】:

          • 我不认为这是在 VS2012 中 - 测试视图已被测试资源管理器取代,它似乎没有类别意识 - 尽管 Cyber​​maxs 的回答表明 VS 开发团队可能正在添加它. VS2012 等效文章建议它目前只能通过命令行获得:msdn.microsoft.com/en-us/library/dd286683%28v=vs.110%29.aspx
          猜你喜欢
          • 1970-01-01
          • 2014-03-14
          • 2013-10-18
          • 2014-02-12
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多