Exécuter certains tests unitaires
La commande dotnet test
dans .NET Core vous permet d’utiliser une expression de filtre pour exécuter certains tests. Cet article explique comment filtrer les tests. Les exemples utilisent dotnet test
. Si vous utilisez vstest.console.exe
, remplacez --filter
par --testcasefilter:
.
Syntax
dotnet test --filter <Expression>
L’expression est au format
<Property><Operator><Value>[|&<Expression>]
.Les expressions peuvent être jointes à l’aide d’opérateurs booléens :
|
pour l’opérateur or booléen ou&
pour l’opérateur and booléen.Les expressions peuvent être placées entre parenthèses. Par exemple :
(Name~MyClass) | (Name~MyClass2)
.Une expression sans opérateur est interprétée comme un contains sur la propriété
FullyQualifiedName
. Par exemple,dotnet test --filter xyz
est identique àdotnet test --filter FullyQualifiedName~xyz
.La propriété est un attribut du
Test Case
. Par exemple, les propriétés suivantes sont prises en charge par les principaux frameworks de test unitaire.Framework de test Propriétés prises en charge MSTest FullyQualifiedName
Name
ClassName
Priority
TestCategory
xUnit FullyQualifiedName
DisplayName
Traits
Nunit FullyQualifiedName
Name
Priority
TestCategory
Opérateurs
=
correspondance exacte!=
pas de correspondance exacte~
contient!~
ne contient pas
La valeur est une chaîne. Toutes les recherches respectent la casse.
Échappement de caractères
Pour utiliser un point d’exclamation (!
) dans une expression de filtre, vous devez l’échapper dans certains shells Linux ou macOS en plaçant une barre oblique inverse devant (\!
). Par exemple, le filtre suivant ignore tous les tests dans un espace de noms qui contient IntegrationTests
:
dotnet test --filter FullyQualifiedName\!~IntegrationTests
Pour les valeurs FullyQualifiedName
qui incluent une virgule pour les paramètres de type générique, échappez la virgule avec %2C
. Par exemple :
dotnet test --filter "FullyQualifiedName=MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod"
Exemples 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()
{
}
}
}
Expression | Résultats |
---|---|
dotnet test --filter Method |
Exécute les tests dont FullyQualifiedName contient Method . |
dotnet test --filter Name~TestMethod1 |
Exécute les tests dont le nom contient TestMethod1 . |
dotnet test --filter ClassName=MSTestNamespace.UnitTest1 |
Exécute des tests qui se trouvent dans la classe MSTestNamespace.UnitTest1 .Remarque : La valeur ClassName doit avoir un espace de noms, donc ClassName=UnitTest1 ne fonctionnera pas. |
dotnet test --filter FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1 |
Exécute tous les tests sauf MSTestNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Exécute des tests annotés avec [TestCategory("CategoryA")] . |
dotnet test --filter Priority=2 |
Exécute des tests annotés avec [Priority(2)] . |
Exemples utilisant les opérateurs conditionnels |
et &
:
Pour exécuter des tests qui ont
UnitTest1
dans leur FullyQualifiedName ou TestCategoryAttribute est"CategoryA"
.dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Pour exécuter des tests qui ont
UnitTest1
dans leur FullyQualifiedName et ont un TestCategoryAttribute de"CategoryA"
.dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Pour exécuter des tests qui contiennent FullyQualifiedName
UnitTest1
et ont un TestCategoryAttribute ou"CategoryA"
ont une PriorityAttribute priorité de .1
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Exemples 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()
{
}
}
}
Expression | Résultats |
---|---|
dotnet test --filter DisplayName=XUnitNamespace.TestClass1.Test1 |
Exécute uniquement un test, XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter FullyQualifiedName!=XUnitNamespace.TestClass1.Test1 |
Exécute tous les tests sauf XUnitNamespace.TestClass1.Test1 . |
dotnet test --filter DisplayName~TestClass1 |
Exécute les tests dont le nom d’affichage contient TestClass1 . |
Dans l’exemple de code, les caractéristiques définies avec les clés "Category"
et "Priority"
peuvent être utilisées pour filtrer.
Expression | Résultats |
---|---|
dotnet test --filter XUnit |
Exécute les tests dont FullyQualifiedName contient XUnit . |
dotnet test --filter Category=CategoryA |
Exécute des tests qui ont [Trait("Category", "CategoryA")] . |
Exemples utilisant les opérateurs conditionnels |
et &
:
Pour exécuter des tests qui ont
TestClass1
dans leur FullyQualifiedName ou ont uneTrait
clé et"Category"
une valeur de"CategoryA"
.dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
Pour exécuter des tests qui ont
TestClass1
dans leur FullyQualifiedName et ont uneTrait
clé et"Category"
une valeur de"CategoryA"
.dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
Pour exécuter des tests qui contiennent FullyQualifiedName
TestClass1
et ont uneTrait
clé et"Category"
une valeur de clé ou"CategoryA"
ont uneTrait
clé de et"Priority"
une valeur de .1
dotnet test --filter "(FullyQualifiedName~TestClass1&Category=CategoryA)|Priority=1"
Exemples 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()
{
}
}
}
Expression | Résultats |
---|---|
dotnet test --filter Method |
Exécute les tests dont FullyQualifiedName contient Method . |
dotnet test --filter Name~TestMethod1 |
Exécute les tests dont le nom contient TestMethod1 . |
dotnet test --filter FullyQualifiedName~NUnitNamespace.UnitTest1 |
Exécute des tests qui se trouvent dans la classe NUnitNamespace.UnitTest1 . |
dotnet test --filter FullyQualifiedName!=NUnitNamespace.UnitTest1.TestMethod1 |
Exécute tous les tests sauf NUnitNamespace.UnitTest1.TestMethod1 . |
dotnet test --filter TestCategory=CategoryA |
Exécute des tests annotés avec [Category("CategoryA")] . |
dotnet test --filter Priority=2 |
Exécute des tests annotés avec [Priority(2)] . |
Exemples utilisant les opérateurs conditionnels |
et &
:
Pour exécuter des tests qui ont UnitTest1
dans leur FullyQualifiedName ou ont un de Category
"CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Pour exécuter des tests qui ont UnitTest1
dans leur FullyQualifiedName et ont un Category
de "CategoryA"
.
dotnet test --filter "FullyQualifiedName~UnitTest1&TestCategory=CategoryA"
Pour exécuter des tests qui ont un FullyQualifiedName conteneur UnitTest1
et ont un Category
ou "CategoryA"
ont un Property
avec un .1
"Priority"
dotnet test --filter "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|Priority=1"
Pour plus d’informations, consultez Filtre TestCase.