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 & :

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 FullyQualifiedNameou ont une Trait avec une clé de "Category" et une valeur de "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1|Category=CategoryA"
    
  • Pour exécuter des tests qui ont TestClass1 dans leur FullyQualifiedNameet ont une Trait avec une clé de "Category" et une valeur de "CategoryA".

    dotnet test --filter "FullyQualifiedName~TestClass1&Category=CategoryA"
    
  • Pour exécuter des tests pour lesquels le FullyQualifiedName contient TestClass1et ont une Trait avec une clé de "Category" et une valeur de "CategoryA"ou ont une Trait avec une clé de "Priority" et 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 FullyQualifiedNameou ont une Category de "CategoryA".

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

Pour exécuter des tests qui ont UnitTest1 dans leur FullyQualifiedNameet ont une Category de "CategoryA".

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

Pour exécuter des tests pour lesquels un FullyQualifiedName contient UnitTest1et ont une Category de "CategoryA"ou ont une Property avec une "Priority" de 1.

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

Pour plus d’informations, consultez Filtre TestCase.

Voir aussi

Étapes suivantes