選択した単体テストの実行

.NET Core で dotnet test コマンドを使用することで、フィルター式を使用して、選択したテストを実行することができます。 この記事では、テストをフィルター処理する方法を示します。 この例では dotnet test を使用します。 vstest.console.exe を使用している場合は、--filter--testcasefilter: に置き換えます。

構文

dotnet test --filter <Expression>
  • Expression<Property><Operator><Value>[|&<Expression>] 形式です。

    式はブール演算子を使用して結合できます。| はブール値 or& はブール値 and に相当します。

    式はかっこで囲むことができます。 たとえば、(Name~MyClass) | (Name~MyClass2) のように指定します。

    FullyQualifiedName プロパティで、operator のない式は contains として解釈されます。 たとえば、dotnet test --filter xyzdotnet test --filter FullyQualifiedName~xyz と同じです。

  • PropertyTest Case の属性です。 たとえば、よく利用される単体テスト フレームワークでは以下のプロパティがサポートされています。

    テスト フレームワーク サポートされるプロパティ
    MSTest FullyQualifiedName
    Name
    ClassName
    Priority
    TestCategory
    xUnit FullyQualifiedName
    DisplayName
    Traits
    Nunit FullyQualifiedName
    Name
    Priority
    TestCategory
  • 演算子

    • = 完全一致
    • != 完全一致ではない
    • ~ 含む
    • !~ 含まない
  • Value は文字列です。 すべての参照で大文字と小文字が区別されます。

文字のエスケープ

フィルター式に感嘆符 (!) を使用するには、一部の 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 FullyQualifiedNameMethod が含まれるテストを実行します。
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)] の注釈が付けられているテストを実行します。

条件演算子 |& の使用例:

  • FullyQualifiedNameUnitTest1 が含まれるか、またはTestCategoryAttribute"CategoryA" であるテストを実行するには。

    dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
    
  • FullyQualifiedNameUnitTest1 が含まれ、かつTestCategoryAttribute"CategoryA" であるテストを実行するには。

    dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
    
  • FullyQualifiedNameUnitTest1 が含まれ、かつTestCategoryAttribute"CategoryA" であるか、またはPriorityAttribute の優先順位が 1 であるテストを実行するには。

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

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 という 1 つのテストのみを実行します。
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 XUnitNamespace.TestClass1.Test1 以外のテストをすべて実行します。
dotnet test --filter DisplayName~TestClass1 表示名に TestClass1 が含まれるテストを実行します。

コード例では、特性をキー "Category""Priority" で定義すると、フィルター処理に使用できます。

正規表現 結果
dotnet test --filter XUnit FullyQualifiedNameXUnit が含まれるテストを実行します。
dotnet test --filter Category=CategoryA [Trait("Category", "CategoryA")] があるテストを実行します。

条件演算子 |& の使用例:

  • FullyQualifiedNameTestClass1 が含まれるか、またはTrait のキーが "Category" で値が "CategoryA" であるテストを実行するには。

    dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
    
  • FullyQualifiedNameTestClass1 が含まれ、かつTrait のキーが "Category" で値が "CategoryA" であるテストを実行するには。

    dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
    
  • FullyQualifiedNameTestClass1 が含まれ、かつTrait のキーが "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 FullyQualifiedNameMethod が含まれるテストを実行します。
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)] の注釈が付けられているテストを実行します。

条件演算子 |& の使用例:

FullyQualifiedNameUnitTest1 が含まれるか、またはCategory"CategoryA" であるテストを実行するには。

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

FullyQualifiedNameUnitTest1 が含まれ、かつCategory"CategoryA" であるテストを実行するには。

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

FullyQualifiedNameUnitTest1 が含まれ、かつCategory"CategoryA" であるか、またはProperty"Priority"1 であるテストを実行するには。

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

詳細については、TestCase フィルターに関するページを参照してください。

関連項目

次の手順