Share via


執行所選的單元測試

您可以透過 .NET Core 中的 dotnet test 命令,使用篩選條件運算式來執行所選測試。 本文會示範篩選測試的方式。 範例會使用 dotnet test。 若要使用vstest.console.exe,請以取代 --testcasefilter: 取代 --filter

語法

dotnet test --filter <Expression>
  • 運算式 的格式為 <Property><Operator><Value>[|&<Expression>]

    運算式可與布林值運算子相聯結:| 與布林值 or& 與布林值 and

    運算式可包含在括號中。 例如: (Name~MyClass) | (Name~MyClass2)

    不含任何運算子的運算式會解讀為 FullyQualifiedName 屬性上的 contains。 例如,dotnet test --filter xyzdotnet test --filter FullyQualifiedName~xyz 相同。

  • 屬性 (property) 是 Test Case 的屬性 (attribute)。 例如,下列是常用單元測試架構所支援的屬性 (property)。

    測試架構 支援的屬性
    MSTest FullyQualifiedName
    Name
    ClassName
    Priority
    TestCategory
    xUnit FullyQualifiedName
    DisplayName
    Traits
    Nunit FullyQualifiedName
    Name
    Priority
    TestCategory
  • 運算子

    • = 完全相符
    • != 不完全相符
    • ~ 包含
    • !~ 不包含
  • 是一個字串。 所有的查閱皆不區分大小寫。

字元逸出

若要在篩選條件運算式中使用驚嘆號 (!),您必須將反斜線 (\!) 放在驚嘆號前面,以在部分 Linux 或 macOS 殼層中將驚嘆號逸出。 例如,當命名空間包含 IntegrationTests 時,下列篩選會略過其中的所有測試:

dotnet test --filter FullyQualifiedName\!~IntegrationTests

如果FullyQualifiedName 值包含泛型型別參數的逗號,請使用 %2C 將逗號逸出。 例如:

dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"

MSTest 範例

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 的測試。
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)] 標註的測試。

使用條件運算子 |& 的範例:

xUnit 範例

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 的測試。
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"
    

NUnit 範例

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 的測試。
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 篩選

另請參閱

下一步