Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В команде 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 FullyQualifiedNameNameClassNamePriorityTestCategoryxUnit FullyQualifiedNameDisplayNameTraitsNunit FullyQualifiedNameNamePriorityTestCategoryОператоры
-
=— точное соответствие -
!=— неточное соответствие -
~— содержит -
!~— не содержит
-
Значение является строкой. Поиск выполняется без учета регистра.
Экранирование символов
Чтобы использовать восклицательный знак (!) в выражении фильтра, необходимо экранировать его в некоторых оболочках Linux или macOS, поставив обратную косую черту перед ним (\!). Например, следующий фильтр пропускает в пространстве имен все тесты, которые содержат IntegrationTests:
dotnet test --filter FullyQualifiedName\!~IntegrationTests
Для значений FullyQualifiedName, включающих запятую для параметров универсального типа, необходимо экранировать запятую с помощью %2C. Например:
dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
Для Name или DisplayNameиспользуйте кодировку URL-адресов для специальных символов. Например, чтобы запустить тест с именем MyTestMethod и строковым значением "text", используйте следующий фильтр:
dotnet test --filter "Name=MyTestMethod \(%22text%22\)"
Примеры 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.