Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- Méthodes d’instance (non statiques)
- Publique
- Retour
void,Task, ouValueTask(MSTest v3.3+) - Sans paramètre, sauf en utilisant des attributs pilotés par les données
[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 :
-
Assertclass : assertions à usage général (AreEqual,IsTrue,ThrowsException) -
StringAssertclasse : assertions spécifiques à une chaîne (Contains, ,MatchesStartsWith) -
CollectionAssertclass : Assertions de collection (Contains, ,AllItemsAreUniqueAreEquivalent)
Tester des membres privés
Vous pouvez tester des membres privés à l’aide de classes wrapper de réflexion :
- PrivateObject: Pour les méthodes d’instance privée
- PrivateType: Pour les méthodes statiques privées
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.