Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
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
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
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 :
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
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 :
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
Meilleures pratiques
Utilisez des assertions spécifiques : préférez
AreEqualàIsTrue(a == b)pour de meilleurs messages d’échec.Inclure des messages descriptifs : aidez à identifier rapidement les échecs avec des messages d’assertion clairs.
Testez une chose à la fois : chaque méthode de test doit vérifier un comportement unique.
Utiliser
Throws/ThrowsExactlypour les exceptions : dans MSTest v3.8+, préférezAssert.Throws,Assert.ThrowsExactlyet leurs équivalents asynchrones (ThrowsAsync,ThrowsExactlyAsync) sur l’attributExpectedException.Préférez : quand des fonctionnalités existent dans les deux classes, utilisez la classe pour améliorer la visibilité et la cohérence.
Analyseurs associés
Les analyseurs suivants permettent de garantir une utilisation appropriée des assertions :
-
MSTEST0006 - Évitez l’attribut
ExpectedException, utilisezAssert.Throwsplutô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.Failplutô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.AreSameavec 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
Assertau lieu deStringAssert. -
-
Assert.ThrowsMSTEST0051 doit contenir une instruction unique. -
MSTEST0053 : évitez les
Assertparamètres de format. - MSTEST0058 : évitez les assertions dans les blocs catch.