运行选择性单元测试

借助 .NET Core 中的 dotnet test 命令,可以使用筛选表达式来运行选择性测试。 本文演示如何筛选运行哪些测试。 下面的示例使用 dotnet test。 如果使用的是 vstest.console.exe,请将 --filter 替换成 --testcasefilter:

字符转义

*nix 上使用包含感叹号 ! 的筛选器需要转义,因为保留了 !。 例如,如果命名空间包含 IntegrationTests,则此筛选器将跳过所有测试:

dotnet test --filter FullyQualifiedName\!~IntegrationTests

重要

反斜杠位于感叹号之前,表示它是转义字符 \!

对于包含泛型类型参数的逗号的 FullyQualifiedName 值,请使用 %2C 来转义逗号。 例如:

dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MSTestNamespace
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod, Priority(1), TestCategory("CategoryA")]
        public void TestMethod1()
        {
        }

        [TestMethod, Priority(2)]
        public void TestMethod2()
        {
        }
    }
}
表达式 结果
dotnet test --filter Method 运行 FullyQualifiedName 包含 Method 的测试。 在 vstest 15.1+ 中可用。
dotnet test --filter Name~TestMethod1 运行名称包含 TestMethod1 的测试。
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 运行属于类 MSTestNamespace.UnitTest1 的测试。
注意: 由于 ClassName 值应有命名空间,因此 ClassName=UnitTest1 无效。
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 运行除 MSTestNamespace.UnitTest1.TestMethod1 之外的其他所有测试。
dotnet test --filter TestCategory=CategoryA 运行含 [TestCategory("CategoryA")] 批注的测试。
dotnet test --filter Priority=2 运行含 [Priority(2)] 批注的测试。

使用条件运算符 |& 的示例:

运行 FullyQualifiedName 中包含 UnitTest1TestCategoryAttribute"CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

运行 FullyQualifiedName 中包含 UnitTest1TestCategoryAttribute"CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"

运行 FullyQualifiedName 中包含 UnitTest1TestCategoryAttribute"CategoryA"PriorityAttribute 的优先级为 1 的测试。

dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
using Xunit;

namespace XUnitNamespace
{
    public class TestClass1
    {
        [Fact, Trait("Priority", "1"), Trait("Category", "CategoryA")]
        public void Test1()
        {
        }

        [Fact, Trait("Priority", "2")]
        public void Test2()
        {
        }
    }
}
表达式 结果
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 仅运行一个测试,即 XUnitNamespace.TestClass1.Test1
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 运行除 XUnitNamespace.TestClass1.Test1 之外的其他所有测试。
dotnet test --filter DisplayName~TestClass1 运行显示名称包含 TestClass1 的测试。

在代码示例中,包含键 "Category""Priority" 的已定义特征可用于筛选。

表达式 结果
dotnet test --filter XUnit 运行 FullyQualifiedName 包含 XUnit 的测试。 在 vstest 15.1+ 中可用。
dotnet test --filter Category=CategoryA 运行包含 [Trait("Category", "CategoryA")] 的测试。

使用条件运算符 |& 的示例:

运行 FullyQualifiedName 中包含 TestClass1Trait 的键为 "Category" 且值为 "CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"

运行 FullyQualifiedName 中包含 TestClass1Trait 的键为 "Category" 且值为 "CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"

运行 FullyQualifiedName 中包含 TestClass1Trait 的键为 "Category" 且值为 "CategoryA"Trait 的键为 "Priority" 且值为 1 的测试。

dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
using NUnit.Framework;

namespace NUnitNamespace
{
    public class UnitTest1
    {
        [Test, Property("Priority", 1), Category("CategoryA")]
        public void TestMethod1()
        {
        }

        [Test, Property("Priority", 2)]
        public void TestMethod2()
        {
        }
    }
}
表达式 结果
dotnet test --filter Method 运行 FullyQualifiedName 包含 Method 的测试。 在 vstest 15.1+ 中可用。
dotnet test --filter Name~TestMethod1 运行名称包含 TestMethod1 的测试。
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 运行属于类 NUnitNamespace.UnitTest1 的测试。
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 运行除 NUnitNamespace.UnitTest1.TestMethod1 之外的其他所有测试。
dotnet test --filter TestCategory=CategoryA 运行含 [Category("CategoryA")] 批注的测试。
dotnet test --filter Priority=2 运行含 [Priority(2)] 批注的测试。

使用条件运算符 |& 的示例:

运行 FullyQualifiedName 中包含 UnitTest1Category"CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

运行 FullyQualifiedName 中包含 UnitTest1Category"CategoryA" 的测试。

dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"

运行 FullyQualifiedName 中包含 UnitTest1Category"CategoryA"Property"Priority"1 的测试。

dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"

有关详细信息,请参阅 TestCase 筛选器

请参阅

后续步骤