De TestContext
-klasse
De TestContext-klasse biedt nuttige informatie en hulpprogramma's voor het beheren van de testuitvoering. Hiermee hebt u toegang tot details over de testuitvoering en kunt u de testomgeving aanpassen. Deze klasse maakt deel uit van de Microsoft.VisualStudio.TestTools.UnitTesting naamruimte.
Het TestContext
-object openen
Het TestContext-object is beschikbaar in de volgende contexten:
- Als parameter voor
[AssemblyInitialize]
en[ClassInitialize]
methoden. In deze context zijn de eigenschappen met betrekking tot de testuitvoering niet beschikbaar. - Als eigenschap van een testklasse. In deze context zijn de eigenschappen met betrekking tot de testuitvoering beschikbaar.
- Als constructorparameter van een testklasse (te beginnen met v3.6). Op deze manier wordt aanbevolen boven het gebruik van de eigenschap, omdat deze toegang geeft tot het object in de constructor. Hoewel de eigenschap alleen beschikbaar is nadat de constructor is uitgevoerd. Op deze manier zorgt u ook voor onveranderbaarheid van het object en kan de compiler afdwingen dat het object niet null is.
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
}
}
Of met 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
}
}
De TestContext
leden
De TestContext
-klasse bevat eigenschappen over de testuitvoering, samen met methoden voor het bewerken van de testomgeving. In deze sectie worden de meest gebruikte eigenschappen en methoden beschreven.
Testuitvoeringsgegevens
De TestContext
bevat informatie over de testuitvoering, zoals:
- TestName : de naam van de test die momenteel wordt uitgevoerd.
- CurrentTestOutcome : het resultaat van de huidige test.
- FullyQualifiedTestClassName : de volledige naam van de testklasse.
- TestRunDirectory: de map waarin de testuitvoering wordt uitgevoerd.
- DeploymentDirectory: de map waarin de implementatie-items zich bevinden.
-
ResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de
TestRunDirectory
. -
TestRunResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de
ResultsDirectory
. -
TestResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de
ResultsDirectory
.
In MSTest 3.7 en hoger biedt de TestContext
-klasse ook nieuwe eigenschappen die nuttig zijn voor TestInitialize
en TestCleanup
methoden:
-
TestContext.TestData
: de gegevens die worden verstrekt aan de geparameteriseerde testmethode ofnull
als de test niet is geparameteriseerd. -
TestContext.TestDisplayName
: de weergavenaam van de testmethode. -
TestContext.TestException
: de uitzondering die door de testmethode of testinitialisatie is opgeworpen, ofnull
als de testmethode geen uitzondering heeft opgeworpen.
Gegevensgestuurde tests
In MSTest 3.7 en hoger kan de eigenschap TestData
worden gebruikt voor toegang tot de gegevens voor de huidige test tijdens TestInitialize
en TestCleanup
methoden.
Wanneer u zich richt op .NET Framework, kunt u met de TestContext
gegevens ophalen en instellen voor elke iteratie in een gegevensgestuurde test, met behulp van eigenschappen zoals DataRow
en DataConnection
(voor DataSource-tests op basis van).
Houd rekening met het volgende CSV-bestand TestData.csv
:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
U kunt het kenmerk DataSource
gebruiken om de gegevens uit het CSV-bestand te lezen:
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));
}
}
}
Runtimegegevens opslaan en ophalen
U kunt TestContext.Properties gebruiken om aangepaste sleutel-waardeparen op te slaan die toegankelijk zijn voor verschillende methoden in dezelfde testsessie.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Gegevens aan een test koppelen
Met de methode TestContext.AddResultFile(String) kunt u een bestand toevoegen aan de testresultaten, zodat het bestand beschikbaar is voor controle in de testuitvoer. Dit kan handig zijn als u bestanden genereert tijdens uw test (bijvoorbeeld logboekbestanden, schermopnamen of gegevensbestanden) die u wilt toevoegen aan de testresultaten.
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.");
}
}
U kunt ook TestContext.Write
of TestContext.WriteLine
methoden gebruiken om aangepaste berichten rechtstreeks naar de testuitvoer te schrijven. Dit is met name handig voor foutopsporingsdoeleinden, omdat deze realtime informatie over logboekregistratie biedt binnen de context van de testuitvoering.