运行选择性单元测试Running selective unit tests

本文内容

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

MSTestMSTest

  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. namespace MSTestNamespace
  3. {
  4. [TestClass]
  5. public class UnitTest1
  6. {
  7. [TestCategory("CategoryA")]
  8. [Priority(1)]
  9. [TestMethod]
  10. public void TestMethod1()
  11. {
  12. }
  13. [Priority(2)]
  14. [TestMethod]
  15. public void TestMethod2()
  16. {
  17. }
  18. }
  19. }
表达式结果
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)] 批注的测试。

使用条件运算符 | 和 &

表达式结果
dotnet test —filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA 的测试。
dotnet test —filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA 的测试。
dotnet test —filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA Priority 是 1 的测试。

xUnitxUnit

  1. using Xunit;
  2. namespace XUnitNamespace
  3. {
  4. public class TestClass1
  5. {
  6. [Trait("Category", "CategoryA")]
  7. [Trait("Priority", "1")]
  8. [Fact]
  9. public void Test1()
  10. {
  11. }
  12. [Trait("Priority", "2")]
  13. [Fact]
  14. public void Test2()
  15. {
  16. }
  17. }
  18. }
表达式结果
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 的测试。

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

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

使用条件运算符 | 和 &

表达式结果
dotnet test —filter "FullyQualifiedName~TestClass1|Category=CategoryA"运行 FullyQualifiedName 包含 TestClass1 CategoryCategoryA 的测试。
dotnet test —filter "FullyQualifiedName~TestClass1&Category=CategoryA"运行 FullyQualifiedName 包含 TestClass1 CategoryCategoryA 的测试。
dotnet test —filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"运行 FullyQualifiedName 包含 TestClass1 CategoryCategoryA Priority 是 1 的测试。

NUnitNUnit

  1. using NUnit.Framework;
  2. namespace NUnitNamespace
  3. {
  4. public class UnitTest1
  5. {
  6. [Category("CategoryA")]
  7. [Property("Priority", 1)]
  8. [Test]
  9. public void TestMethod1()
  10. {
  11. }
  12. [Property("Priority", 2)]
  13. [Test]
  14. public void TestMethod2()
  15. {
  16. }
  17. }
  18. }
表达式结果
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)] 批注的测试。

使用条件运算符 | 和 &

表达式结果
dotnet test —filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA 的测试。
dotnet test —filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA 的测试。
dotnet test —filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"运行 FullyQualifiedName 包含 UnitTest1 TestCategoryCategoryA Priority 是 1 的测试。