Выполнение выбранных модульных тестов

В команде dotnet test в .NET Core можно использовать выражения фильтра для выполнения выбранных модульных тестов. В этой статье демонстрируется возможность фильтрации тестов. В этих примерах используется dotnet test. Если вы используете vstest.console.exe, замените --filter на --testcasefilter:.

Синтаксис

dotnet test --filter <Expression>
  • Выражение имеет формат <Property><Operator><Value>[|&<Expression>].

    Выражения можно объединять с логическими операторами: | для логического или, & для логического и.

    Выражения можно заключать в круглые скобки. Например, (Name~MyClass) | (Name~MyClass2).

    Выражение без оператора интерпретируется как инструкция contains для свойства FullyQualifiedName. Например, dotnet test --filter xyz равносильно dotnet test --filter FullyQualifiedName~xyz.

  • Свойство является атрибутом объекта Test Case. Ниже перечислены примеры свойств, которые поддерживаются популярными платформами модульного тестирования.

    Платформа тестирования Поддерживаемые свойства
    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)].

Примеры использования условных операторов | и &:

  • Выполнение тестов, имеющих UnitTest1в илиTestCategoryAttributeFullyQualifiedName значение "CategoryA".

    dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
    
  • Для выполнения тестов, которые имеют UnitTest1в иFullyQualifiedName имеют значение TestCategoryAttribute"CategoryA".

    dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
    
  • Выполнение тестов, содержащих FullyQualifiedNameUnitTest1и имеющих TestCategoryAttribute"CategoryA" объект или с приоритетом PriorityAttribute1.

    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.
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")].

Примеры использования условных операторов | и &:

  • Для выполнения тестов, которые имеют TestClass1 в своем FullyQualifiedNameили имеют Trait с ключом "Category" и значением "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
    
  • Для выполнения тестов, имеющих TestClass1 в своих FullyQualifiedNameи имеющих Trait с ключом "Category" и значением "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
    
  • Для выполнения тестов, содержащих FullyQualifiedNameTestClass1и имеющих Trait с ключом "Category" и значением или"CategoryA" с ключом "Priority" и значением Trait1.

    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)].

Примеры использования условных операторов | и &:

Выполнение тестов, которые имеют UnitTest1 в своем FullyQualifiedNameили имеют Category значение "CategoryA".

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

Для выполнения тестов, которые имеют UnitTest1в иFullyQualifiedName имеют значение Category"CategoryA".

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

Для выполнения тестов, содержащих FullyQualifiedNameUnitTest1и имеющих Category"Priority""CategoryA"Property1или с .

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

Дополнительные сведения см. в документе о фильтре TestCase.

См. также

Следующие шаги