Выполнение выбранных модульных тестов
В команде 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.