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 ounull
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, ounull
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.