【问题标题】:How to run filters on dotnet tests如何在 dotnet 测试上运行过滤器
【发布时间】:2018-08-29 14:27:49
【问题描述】:

我在VSTS中有一个build,如下:

您可以从屏幕截图中看到“测试并生成代码覆盖率”的测试步骤。它使用这个命令:

/p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)\TestResults\Coverage\coverage

这允许生成代码覆盖率报告。我已使用我定义的 Trait(例如集成或单元)将“类别”添加到我的 xUnit 测试中,以允许我在构建/发布期间过滤测试。例如:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Xunit.Abstractions;
    using Xunit.Sdk;

    /// <summary>
    /// Decorates a test as a Unit Test, so that it runs in Continuous Integration builds.
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public sealed class IsUnitAttribute : AICategoryAttribute
    {
        /// <summary>
        /// Initializes a new instance of <see cref="IsUnitAttribute"/>
        /// </summary>
        public IsUnitAttribute() : base("Unit") { }
    }

    /// <summary>
    /// Decorates a test as an Integration Test, so that it runs in Continuous Integration builds.
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public sealed class IsIntegrationAttribute : AICategoryAttribute
    {
        /// <summary>
        /// Initializes a new instance of <see cref="IsIntegrationAttribute"/>
        /// </summary>
        public IsIntegrationAttribute() : base("Integration") { }
    }

我只知道如何在 VS-Test 步骤中应用过滤器,如下:

但不是在我使用 dotnet 进行测试时:

我只知道如何使用 dotnet(而不是 VS-Test)构建代码覆盖率……我想两者都做!我该怎么做:

a) 将命令添加到 VS-Test 以生成代码覆盖率,就像我使用上面的命令对 dotnet 所做的一样。

b) 将过滤器应用于 dotnet 测试步骤?

任何指针都非常感谢!

【问题讨论】:

    标签: testing code-coverage xunit.net azure-pipelines-build-task reportgenerator


    【解决方案1】:

    没有为 dotnet 测试步骤提交的 Test Filter criteria。但是,您可以尝试在命令行中使用参数 --filter 运行 dotnet 测试。

    请看Filter option details

    使用给定的表达式过滤掉当前项目中的测试。 有关详细信息,请参阅过滤器选项详细信息部分。更多 有关如何使用选择性单元测试过滤的信息和示例, 见Running selective unit tests

    【讨论】:

    • 使用命令 --filter 似乎可以工作,但是当我尝试在 VSTest (filter=Unit) 中工作的命令时,它找不到我的单元测试:-\ 知道为什么会这样? --filter 后面的命令是否应该不同于“=Unit”?我也尝试了“=IsUnit”,但没有任何乐趣。
    • @RobMcCabe 好吧,它们有不同的语法,请参阅Filter option details 进行 dotnet 测试。以下是在 dotnet 测试中使用 --filter 的示例供您参考:DotNet Test With NUnit
    • 对于其他想要在 Xunit 中过滤类别名称的人来说,这是对我有用的参数:--filter "Category=Unit"
    • 这对我来说可以过滤一个 [TestMethod]。只需像这样使用类名:dotnet test --filter "CanPost_Add_New_Card_Date"
    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2022-08-16
    • 2021-04-21
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多