Partager via


Écrire des tests avec MSTest

Dans cet article, vous allez découvrir les API et les conventions utilisées par MSTest pour vous aider à écrire et à mettre en forme vos tests.

Remarque

Les noms d’attributs se terminant par « Attribut » peuvent utiliser le formulaire court. TestClass et TestClassAttribute sont équivalents. Les attributs avec des constructeurs sans paramètre peuvent omettre des parenthèses.

Structure de test

Chaque classe de test MSTest doit avoir l’attribut TestClass , et chaque méthode de test doit avoir l’attribut TestMethod :

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_TwoNumbers_ReturnsSum()
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        int result = calculator.Add(2, 3);

        // Assert
        Assert.AreEqual(5, result);
    }
}

TestClassAttribute

Le symbole TestClassAttribute indique une classe qui contient des tests et, éventuellement, des méthodes d'initialisation ou de nettoyage. Vous pouvez étendre cet attribut pour personnaliser le comportement de la classe de test.

TestMethodAttribute

Le TestMethodAttribute marque une méthode comme test à exécuter. Les méthodes de test doivent être les suivantes :

[TestClass]
public class TestMethodExamples
{
    [TestMethod]
    public void SynchronousTest()
    {
        Assert.IsTrue(true);
    }

    [TestMethod]
    public async Task AsynchronousTest()
    {
        await Task.Delay(100);
        Assert.IsTrue(true);
    }
}

Avertissement

N’utilisez pas async void pour les méthodes de test. Utilisez plutôt async Task ou async ValueTask.

DiscoverInternalsAttribute

L’attribut DiscoverInternalsAttribute d’assembly permet à MSTest de découvrir internal les classes et méthodes de test. Par défaut, seuls public tests sont découverts. Cet attribut est particulièrement utile lorsque vous avez des tests paramétrables qui utilisent des types internes comme paramètres :

[assembly: DiscoverInternals]

internal record TestInput(int Value, string Description);

[TestClass]
public class CalculatorTests
{
    internal static IEnumerable<TestInput> TestData
    {
        get
        {
            yield return new TestInput(1, "one");
            yield return new TestInput(2, "two");
        }
    }

    [TestMethod]
    [DynamicData(nameof(TestData))]
    internal void Add_WithTestInput_ReturnsExpected(TestInput input)
    {
        var calculator = new Calculator();
        int result = calculator.Add(input.Value, 1);
        Assert.AreEqual(input.Value + 1, result);
    }
}

Sans DiscoverInternals, la méthode de test et son type de paramètre interne TestInput ne seraient pas découverts par l’exécuteur de test.

Concepts de base

La documentation MSTest est organisée par rubrique :

Sujet Descriptif
Affirmations Vérifier les résultats attendus avec les classes Assert
Tests pilotés par les données Exécuter des tests avec plusieurs entrées (DataRow, DynamicData)
Cycle de vie des tests Configurer et nettoyer aux niveaux d’assembly, de classe et de test
Contrôle d’exécution Threading, parallélisation, délais d’attente, nouvelles tentatives et exécution conditionnelle
Organisation de test Catégories, priorités, propriétaires et métadonnées
TestContext Accéder aux informations du runtime de test

Référence rapide des attributs

Catégorie Attributs Consultez
Identification des tests TestClass, TestMethodDiscoverInternals Cette page
Piloté par les données DataRow, DynamicDataTestDataRow Tests pilotés par les données
Cycle de vie AssemblyInitialize, ClassInitialize, TestInitialize et les équivalents de nettoyage Cycle de vie des tests
Thread STATestClass, STATestMethodUITestMethod Contrôle d’exécution
Parallélisation Parallelize, DoNotParallelize Contrôle d’exécution
Délai d’expiration/nouvelle tentative Timeout, Retry Contrôle d’exécution
Conditionnelle Ignore, OSConditionCICondition Contrôle d’exécution
Métadonnées TestCategory, TestProperty, Owner, Priority Organisation de test
Suivi du travail WorkItem, GitHubWorkItem Organisation de test

Assertions

Utilisez les classes Assert de l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting pour vérifier des fonctionnalités spécifiques. Une méthode de test exerce du code dans votre application, mais elle signale la justesse uniquement lorsque vous incluez des instructions Assert.

Les assertions MSTest sont divisées en :

Tester des membres privés

Vous pouvez tester des membres privés à l’aide de classes wrapper de réflexion :

Conseil / Astuce

Déterminez si les méthodes privées ont besoin de tests directs. Souvent, les tests par le biais d’interfaces publiques offrent une meilleure couverture et des tests plus gérables.

Voir aussi