Поделиться через


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

В команде 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 в FullyQualifiedName или TestCategoryAttribute является "CategoryA".

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

    dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
    
  • Выполняет тесты, у которых есть FullyQualifiedName с UnitTest1 и 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.
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"
    
  • Выполняет тесты, у которых есть либо FullyQualifiedName с TestClass1 и есть 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 Выполняет тесты, 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"

Выполняет тесты, у которых есть FullyQualifiedName с UnitTest1 и Category с "CategoryA" или есть Property, где "Priority" имеет значение 1.

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

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

См. также

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