TFS 2015 vNext版本中的测试类别过滤器,其中mspec测试适配器未过滤测试

时间:2017-08-10 20:46:01

标签: tfs tfsbuild mspec

我有代码库,其中单元测试使用机器规范编写,利用基于nuget的测试运行器Machine.Specifications.Runner.VisualStudio,v2.10来执行测试。它在Visual Studio(2015& 2017)的上下文中工作正常,并且Trait过滤按预期工作。但是,在使用测试程序集构建步骤时,它似乎不遵守类别筛选器。与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);
    }

构建步骤配置 TFS vNext build test step

构建日志

...
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 - 添加了所需的屏幕截图和反馈

不过滤的测试资源管理器 Viewing tests in VS Test Explorer without any filtering

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

在类别上过滤测试资源管理器 Filtering test using category in VS Test Explorer

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

运行vs2015 vstest.console.exe Screen shot of running vstest.console.exe on dev machine

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

1 个答案:

答案 0 :(得分:0)

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构建中获得相同的结果。

对于测试资源管理器中的过滤器,没有此选项可用于过滤测试。只有配置连续集成,实际上不是过滤器。如果您不介意,请详细说明您是如何使用过滤器特性的:通过visual studio测试运行中的ContinuousIntegration。

enter image description here

害怕使用过滤器特性:ContinuousIntegration与TFS2015构建代理中的TestCategory=ContinuousIntegration不等。