Partage via


Assertions de MSTest

Utilisez les classes Assert de l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting pour vérifier une fonctionnalité spécifique. Une méthode de test exerce le code dans votre application, mais signale l’exactitude uniquement lorsque vous incluez des Assert instructions.

Aperçu

MSTest fournit trois classes d’assertion :

classe Objectif
Assert Assertions à usage général pour les valeurs, les types et les exceptions.
StringAssert Assertions spécifiques à la chaîne pour les modèles, les sous-chaînes et les comparaisons.
CollectionAssert Assertions de collection pour comparer et valider des collections.

Conseil / Astuce

Quand des fonctionnalités existent dans les deux Assert et StringAssert/CollectionAssert, préférez la Assert classe. La Assert classe offre une meilleure détectabilité et est le choix recommandé pour le nouveau code. StringAssert et CollectionAssert sont maintenus pour la compatibilité descendante.

Toutes les méthodes d’assertion acceptent un paramètre de message facultatif qui s’affiche lorsque l’assertion échoue, ce qui vous aide à identifier la cause :

Assert.AreEqual(expected, actual, "Values should match after processing");

La classe Assert

Utilisez la classe Assert pour vérifier que le code sous test se comporte comme prévu.

Méthodes d’assertion courantes

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

API disponibles

La classe StringAssert

Utilisez la classe StringAssert pour comparer et examiner des chaînes.

Note

Toutes les StringAssert méthodes ont des équivalents dans la Assert classe. Préférez les Assert méthodes pour une meilleure détectabilité. La StringAssert classe est maintenue pour la compatibilité descendante.

Les API disponibles sont les suivantes :

La classe CollectionAssert

Utilisez la classe CollectionAssert pour comparer des collections d’objets ou pour vérifier l’état d’une collection.

Note

Lorsqu’une méthode équivalente existe dans la Assert classe (par exemple Assert.Contains, ), Assert.DoesNotContainpréférez utiliser Assert pour une meilleure détectabilité. La CollectionAssert classe est conservée principalement pour la compatibilité descendante.

Les API disponibles sont les suivantes :

Meilleures pratiques

  1. Utilisez des assertions spécifiques : préférez AreEqual à IsTrue(a == b) pour de meilleurs messages d’échec.

  2. Inclure des messages descriptifs : aidez à identifier rapidement les échecs avec des messages d’assertion clairs.

  3. Testez une chose à la fois : chaque méthode de test doit vérifier un comportement unique.

  4. Utiliser Throws/ThrowsExactly pour les exceptions : dans MSTest v3.8+, préférez Assert.Throws, Assert.ThrowsExactlyet leurs équivalents asynchrones (ThrowsAsync, ThrowsExactlyAsync) sur l’attribut ExpectedException .

  5. Préférez : quand des fonctionnalités existent dans les deux classes, utilisez la classe pour améliorer la visibilité et la cohérence.

Les analyseurs suivants permettent de garantir une utilisation appropriée des assertions :

  • MSTEST0006 - Évitez l’attribut ExpectedException , utilisez Assert.Throws plutôt des méthodes.
  • MSTEST0017 : les arguments d’assertion doivent être passés dans l’ordre correct.
  • MSTEST0023 - Ne pas nier les assertions booléennes.
  • MSTEST0025 - Préférez Assert.Fail plutôt que les conditions toujours fausses.
  • MSTEST0026 : les arguments d’assertion doivent éviter l’accès conditionnel.
  • MSTEST0032 : passez en revue les conditions d’assertion always-true.
  • MSTEST0037 - Utilisez des méthodes d’assertion appropriées.
  • MSTEST0038 - Évitez Assert.AreSame avec les types valeur.
  • MSTEST0039 : utilisez des méthodes plus récentes Assert.Throws .
  • MSTEST0040 - Évitez d’utiliser des assertions dans un contexte void asynchrone.
  • MSTEST0046 - Utiliser Assert au lieu de StringAssert.
  • - Assert.Throws MSTEST0051 doit contenir une instruction unique.
  • MSTEST0053 : évitez les Assert paramètres de format.
  • MSTEST0058 : évitez les assertions dans les blocs catch.

Voir aussi