Partage via


Classe TestContext

La classe TestContext fournit des informations et des outils utiles pour gérer l’exécution des tests. Il vous permet d’accéder aux détails de l’exécution du test et d’ajuster l’environnement de test. Cette classe fait partie de l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting.

Accès à l’objet TestContext

L’objet TestContext est disponible dans les contextes suivants :

  • En tant que paramètre pour [AssemblyInitialize] et [ClassInitialize] méthodes. Dans ce contexte, les propriétés associées à l’exécution de test ne sont pas disponibles.
  • En tant que propriété d’une classe de test. Dans ce contexte, les propriétés associées à l’exécution de test sont disponibles.
  • En tant que paramètre de constructeur d’une classe de test (à partir de la version 3.6). Cette méthode est recommandée plutôt que d'utiliser la propriété, car elle permet d'accéder à l'objet dans le constructeur. En effet, la propriété est disponible uniquement après l’exécution du constructeur. Cette façon permet également de garantir l’immuabilité de l’objet et permet au compilateur d’appliquer que l’objet n’est pas null.
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class MyTestClassTestContext
{
    public TestContext TestContext { get; set; }

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [ClassInitialize]
    public static void ClassInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [TestMethod]
    public void MyTestMethod()
    {
        // Access TestContext properties and methods here
    }
}

Ou avec MSTest 3.6+ :

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class MyTestClassTestContextThroughCtor
{
    private readonly TestContext _testContext;

    public MyTestClassTestContextThroughCtor(TestContext testContext)
    {
        _testContext = testContext;
    }

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [ClassInitialize]
    public static void ClassInitialize(TestContext context)
    {
        // Access TestContext properties and methods here. The properties related to the test run are not available.
    }

    [TestMethod]
    public void MyTestMethod()
    {
        // Access TestContext properties and methods here
    }
}

Les membres TestContext

La classe TestContext fournit des propriétés sur l’exécution de test, ainsi que des méthodes pour manipuler l’environnement de test. Cette section traite des propriétés et méthodes les plus couramment utilisées.

Informations d’exécution de test

Le TestContext fournit des informations sur l’exécution de test, telles que :

  • TestName : nom du test en cours d’exécution.
  • CurrentTestOutcome - résultat du test actuel.
  • FullyQualifiedTestClassName : nom complet de la classe de test.
  • TestRunDirectory : répertoire dans lequel l’exécution du test est exécutée.
  • DeploymentDirectory : répertoire où se trouvent les éléments de déploiement.
  • ResultsDirectory : répertoire dans lequel les résultats du test sont stockés. En règle générale, un sous-répertoire du TestRunDirectory.
  • TestRunResultsDirectory : répertoire dans lequel les résultats du test sont stockés. En règle générale, un sous-répertoire du ResultsDirectory.
  • TestResultsDirectory : répertoire dans lequel les résultats du test sont stockés. En règle générale, un sous-répertoire du ResultsDirectory.

Dans MSTest 3.7 et versions ultérieures, la classe TestContext fournit également de nouvelles propriétés utiles pour les méthodes TestInitialize et TestCleanup :

  • TestContext.TestData : données qui seront fournies à la méthode de test paramétrable ou null si le test n’est pas paramétré.
  • TestContext.TestDisplayName : nom complet de la méthode de test.
  • TestContext.TestException : exception levée par la méthode de test ou l’initialisation du test, ou null si la méthode de test n’a pas levée d’exception.

Tests pilotés par les données

Dans MSTest 3.7 et versions ultérieures, la propriété TestData peut être utilisée pour accéder aux données du test actuel pendant TestInitialize et les méthodes TestCleanup.

Lors du ciblage du .NET Framework, le TestContext vous permet de récupérer et de définir des données pour chaque itération dans un test piloté par les données, à l’aide de propriétés telles que DataRow et DataConnection (pour les tests basés sur DataSource).

Considérez le fichier CSV suivant TestData.csv:

Number,Name
1,TestValue1
2,TestValue2
3,TestValue3

Vous pouvez utiliser l’attribut DataSource pour lire les données à partir du fichier CSV :

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace YourNamespace
{
    [TestClass]
    public class CsvDataDrivenTest
    {
        public TestContext TestContext { get; set; }

        [TestMethod]
        [DataSource(
            "Microsoft.VisualStudio.TestTools.DataSource.CSV",
            "|DataDirectory|\\TestData.csv",
            "TestData#csv",
            DataAccessMethod.Sequential)]
        public void TestWithCsvDataSource()
        {
            // Access data from the current row
            int number = Convert.ToInt32(TestContext.DataRow["Number"]);
            string name = TestContext.DataRow["Name"].ToString();

            Console.WriteLine($"Number: {number}, Name: {name}");

            // Example assertions or logic
            Assert.IsTrue(number > 0);
            Assert.IsFalse(string.IsNullOrEmpty(name));
        }
    }
}

Stocker et récupérer des données d’exécution

Vous pouvez utiliser TestContext.Properties pour stocker des paires clé-valeur personnalisées accessibles entre différentes méthodes dans la même session de test.

TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();

Associer des données à un test

La méthode TestContext.AddResultFile(String) vous permet d’ajouter un fichier aux résultats des tests, le rendant disponible pour révision dans la sortie du test. Cela peut être utile si vous générez des fichiers pendant votre test (par exemple, les fichiers journaux, les captures d’écran ou les fichiers de données) que vous souhaitez joindre aux résultats du test.

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class TestClassResultFile
{
    public TestContext TestContext { get; set; }

    [TestMethod]
    public void TestMethodWithResultFile()
    {
        // Simulate creating a log file for this test
        string logFilePath = Path.Combine(TestContext.TestRunDirectory, "TestLog.txt");
        File.WriteAllText(logFilePath, "This is a sample log entry for the test.");

        // Add the log file to the test result
        TestContext.AddResultFile(logFilePath);

        // Perform some assertions (example only)
        Assert.IsTrue(File.Exists(logFilePath), "The log file was not created.");
        Assert.IsTrue(new FileInfo(logFilePath).Length > 0, "The log file is empty.");
    }
}

Vous pouvez également utiliser des méthodes TestContext.Write ou TestContext.WriteLine pour écrire des messages personnalisés directement dans la sortie de test. Cela est particulièrement utile pour le débogage, car il fournit des informations de journalisation en temps réel dans votre contexte d’exécution de test.