【问题标题】:Test category filter in a TFS 2015 vNext build with the mspec test adapter not filtering tests使用 mspec 测试适配器在 TFS 2015 vNext 构建中测试类别过滤器不过滤测试
【发布时间】:2018-01-19 06:17:52
【问题描述】:

我有代码库,其中单元测试是使用机器规范编写的,利用基于 nuget 的测试运行器 Machine.Specifications.Runner.VisualStudio,v2.10 来执行测试。它在 Visual Studio(2015 和 2017)的上下文中运行良好,并且按 Trait 过滤按预期工作。但是,当使用 Test Assemblies 构建步骤时,它似乎不支持类别过滤器。与 Visual Studio 相比,TFS 构建代理运行测试适配器的方式有什么特别之处吗?

示例测试

    [Subject(typeof(RetrieveConfiguration))]
    [Tags(Categories.Manual)]
    public class When_hitting_the_general_services_uri : SpecificationContext
    {
        private static TestResult result;

        Establish context = () =>
        {
            IServiceInfo serviceInfo = Substitute.For<IServiceInfo>();
            serviceInfo.Url = "";
            environment.GetService("Confiugration", "Retrieve").Returns(serviceInfo);
            x509Manager.LoadFromSignature(ValidSignature).Returns(LoadFromMachine(ValidSignature));
        };

        Because of = () => error = Catch.Exception(() => result = sut.Execute(new Uri("https://myproductionuri/retrieve"), environment));

        It should_have_the_succeeded = () => result.Result.ShouldEqual(StepResult.Success);
    }

构建步骤配置

构建日志

...
2017-08-10T20:49:44.8717852Z ##[debug]Calling Invoke-VSTest for all test assemblies
2017-08-10T20:49:44.9655216Z Working folder: E:\B39\BA78\WS\18
2017-08-10T20:49:44.9655216Z Executing C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe "E:\B39\BA78\WS\18\s\Src\Test\Verifier.Reporting.Azure.Storage.Spec\bin\Release\Verifier.Reporting.Azure.Store.Spec.dll"  /TestCaseFilter:"TestCategory=ContinuousIntegration" /EnableCodeCoverage /logger:trx /TestAdapterPath:"E:\B39\BA78\WS\18\s"
2017-08-10T20:49:45.1999042Z Microsoft (R) Test Execution Command Line Tool Version 14.0.25420.1
2017-08-10T20:49:45.1999042Z Copyright (c) Microsoft Corporation.  All rights reserved.
2017-08-10T20:49:45.5592884Z Starting test execution, please wait...
2017-08-10T20:49:56.8721150Z Information: Machine Specifications Visual Studio Test Adapter - Executing tests in E:\B39\BA78\WS\18\s\Src\Test\Verifier.Reporting.Azure.Storage.Spec\bin\Release\Verifier.Reporting.Azure.Store.Spec.dll
2017-08-10T20:50:01.5285749Z Passed   Verifier.Reporting.Azure.Store.Spec.When_publishing_a_report.should_have_succeeded
...

8/25 更新 - 添加了请求的屏幕截图和反馈

不过滤的测试资源管理器

请注意,总共有 16 个测试,以 when hit 开头的表示是集成测试,预计不会在构建代理的上下文中运行。

使用类别过滤的测试资源管理器

测试总数已从 16 个减少到 14 个。由于该测试没有请求的标记,因此已从测试运行中删除。

运行 vs2015 vstest.console.exe

至于在 Visual Studio 之外运行测试,似乎测试运行程序在我的开发机器上加载测试适配器时遇到问题,而适配器在 Visual Studio 和构建代理上运行良好。

【问题讨论】:

  • 能否在构建日志中分享相关的错误信息?
  • @Patrick-MSFT 我添加了围绕单元测试执行的构建日志部分。作为构建的一部分,不会引发错误,只是执行未使用过滤器中应用的指定 TestCategory\Trait 修饰的测试。测试没有通过,因为它们引用了构建代理主机根本不可用的资源。我们通过在测试中添加 if 调试编译指示来解决该问题,但这不是一个理想的解决方案。
  • 使用本地VS过滤测试时传递了哪些参数? TFS VStest 任务中的测试筛选条件与`vstest.console.exe` 的控制台选项/TestCaseFilter 的工作方式相同。您上面的测试代码没有包含相应的类别信息。有关 VStest 任务中的 Test Filter Criteria 的更多信息,请参阅此博客:dotnetcatch.com/2016/03/11/…
  • @Patrick-MSFT 这就是我遇到的问题。上面的代码不包括在测试过滤条件中指定的测试类别,但它包含在构建代理上的测试运行测试中。它使用过滤器特征通过 Visual Studio 中的测试资源管理器按预期工作:ContinuousIntegration。我相信这相当于 2015 年构建代理中的 TestCategory=ContinuousIntegration 。如果是这样,那么还有其他原因导致行为差异。
  • 您好 Tedford,通常需要将测试类别指定为过滤器。至于测试资源管理器中的过滤器,没有过滤测试的选项。只有一个配置持续集成,它实际上不是一个过滤器。如果您不介意,请在 Visual Studio 的测试运行测试中展示您是如何使用过滤器特征的:ContinuousIntegration。更多细节请看我的更新答案。

标签: tfs tfsbuild mspec


【解决方案1】:

vstest 任务只是使用vstest.console.exe 来执行测试。 TFS VStest 任务中的测试过滤条件与vstest.console.exe 的控制台选项/TestCaseFilter 的工作方式相同。

"TestCategory=ContinuousIntegration" 

通过上面,我没有在你的代码中看到这样的TestCategory名称,如果我们使用命令行(vstest.console.exe)运行测试,我们必须指定匹配的名称,即意味着至少我们在您的测试方法代码上方命名一个 TestCategory 属性 即我的测试方法代码:

[TestCategory("nine"), TestMethod()]
    public void TestMethod1()
    {
        Assert.AreEqual(1, 1);
    }

我需要在命令行中使用下面的代码来运行它:

Vstest.console.exe UnitTestvstsada.dll /TestCaseFilter:TestCategory=nine

它将成功过滤测试并在 TFS 构建中得到相同的结果。

至于Test Explorer中的过滤器,没有过滤测试的选项。只有一个配置持续集成,它实际上不是一个过滤器。如果您不介意,请说明您是如何在通过 Visual Studio 运行的测试中使用过滤器 trait:ContinuousIntegration 的。

害怕在 TFS2015 构建代理中使用不等同于 TestCategory=ContinuousIntegration 的过滤器 trait:ContinuousIntegration。

【讨论】:

  • 我用测试资源管理器中的过滤屏幕截图更新了我的问题,并尝试使用 vstest.console.exe 运行
猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 2015-02-16
  • 2016-09-19
  • 2020-01-05
  • 2018-01-27
  • 2017-03-30
  • 2021-08-28
  • 2013-01-05
相关资源
最近更新 更多