Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De
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, de ClassInitialize-methoden. In deze context zijn de eigenschappen met betrekking tot de testuitvoering niet beschikbaar.
- Vanaf 3.6 kunt u, indien gewenst, de ClassCleanup-methoden als parameter meegeven aan AssemblyCleanup. 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:
- TestContext.TestName : de naam van de test die momenteel wordt uitgevoerd.
- TestContext.CurrentTestOutcome : het resultaat van de huidige test.
- TestContext.FullyQualifiedTestClassName : de volledige naam van de testklasse.
- TestContext.TestRunDirectory: de map waarin de testuitvoering wordt uitgevoerd.
-
TestContext.DeploymentDirectory: de map waarin de implementatie-items zich bevinden. Als u deze map wilt vullen, kunt u
DeploymentItemAttributegebruiken. - TestContext.ResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de TestContext.TestRunDirectory.
- TestContext.TestRunResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de TestContext.ResultsDirectory.
- TestContext.TestResultsDirectory: de map waarin de testresultaten worden opgeslagen. Meestal een submap van de TestContext.ResultsDirectory.
- Beginnend met MSTest 3.9, TestContext.TestRunCount - het aantal keren dat de huidige test is uitgevoerd, tellend van 1. De waarde is groter dan 1 als een test opnieuw wordt uitgevoerd met
[Retry].
Tijdelijke map per test
Important
TestContext.TestTempDirectory is gepland voor MSTest 4.4 en is alleen beschikbaar in preview-versies totdat MSTest 4.4.0 wordt uitgebracht.
Gebruik TestContext.TestTempDirectory deze als privé-scratchruimte voor een test. MSTest maakt de map alleen wanneer u de eigenschap voor het eerst opent en elke testuitvoering ontvangt een unieke map. Elke gegevensrij ontvangt ook een eigen map, dus parallelle tests delen geen paden.
string path = Path.Combine(TestContext.TestTempDirectory!, "output.json");
File.WriteAllText(path, json);
MSTest maakt de map onder TestResultsDirectory indien mogelijk en valt terug naar de tijdelijke map van het systeem wanneer het resultatenpad niet beschikbaar is, te lang of alleen-lezen is. MSTest verwijdert de map na een geslaagde test en behoudt deze na een niet-geslaagd resultaat. Stel de MSTEST_TEST_TEMP_DIRECTORY_RETAIN omgevingsvariabele 1 in op of true bewaar mappen voor alle resultaten.
Wanneer een geslaagde test een bestand uit de map registreert AddResultFile, behoudt MSTest de map totdat de host de bijlage verzamelt. Opschonen is het beste en wijzigt het testresultaat niet.
TestTempDirectoryis beschikbaar voor .NET- en .NET Framework-doelen, maar niet voor UWP- of WinUI-doelen. De eigenschap wijzigt de huidige procesmap niet.
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 of
nullals de test niet is geparameteriseerd. - TestContext.TestDisplayName: de weergavenaam van de testmethode.
-
TestContext.TestException: de uitzondering die door de testmethode of testinitialisatie is opgeworpen, of
nullals de testmethode geen uitzondering heeft opgeworpen.
Gegevensgestuurde tests
In MSTest 3.7 en hoger kan de eigenschap TestContext.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();
Note
Vanaf MSTest 4.2 zijn testcategorieën [TestCategory] opgenomen in TestContext.Properties.
Vanaf MSTest 4.3 worden aangepaste eigenschappen die in TestContext.Properties aan [AssemblyInitialize] zijn toegevoegd, doorgegeven aan elke klasse en test in de assembly, en eigenschappen die in [ClassInitialize] zijn toegevoegd, worden doorgegeven aan elke test in die klasse. Hiermee kunnen fixtures gedeelde context beschikbaar stellen die testmethoden kunnen lezen.
Beginnend met MSTest 4.3.3, [TestProperty] waarden, testcategorieën, door de host geleverde eigenschappen en eigenschappen die een test toevoegt, blijft het bereik van die test behouden en worden ze niet doorgegeven aan tests op hetzelfde niveau.
Open TestContext vanuit de huidige aanroepstack
Vanaf MSTest 4.2 geeft TestContext.Current de TestContext van de huidige test terug vanaf elke plek in de aanroepstack tijdens het uitvoeren van de testmethode. Deze API is experimenteel, maakt gebruik van het [Experimental] kenmerk en kan veranderen in een toekomstige MSTest-versie.
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. Vanaf MSTest 4.4 echot de Live uitvoeropnamemodus deze berichten terwijl de test wordt uitgevoerd en deze nog steeds aan het uiteindelijke testresultaat koppelt. Zie MSTest-uitvoer configureren voor meer informatie.
Annuleringstoken
Met TestContext wordt een CancellationToken-eigenschap blootgelegd die een signaal geeft wanneer de test een time-out bereikt of de testuitvoering wordt onderbroken. U moet dit token doorgeven aan asynchrone bewerkingen, zodat ze gezamenlijk kunnen reageren op annulering. Dit is vooral belangrijk bij het gebruik van time-outkenmerken .
Wanneer TestContext wordt benaderd als een eigenschap:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClassCancellationToken
{
// MSTest automatically sets the TestContext property before each test runs.
// MSTest.Analyzers includes a diagnostic suppressor that removes CS8618
// (non-nullable property uninitialized) for this property.
public TestContext TestContext { get; set; }
[TestMethod]
[Timeout(5000, CooperativeCancellation = true)]
public async Task MyAsyncTest()
{
using var client = new HttpClient();
var response = await client.GetAsync(
"https://example.com", TestContext.CancellationToken);
Assert.IsTrue(response.IsSuccessStatusCode);
}
}
Wanneer TestContext wordt geïnjecteerd via de constructor (MSTest 3.6+):
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClassCancellationTokenCtor
{
private readonly TestContext _testContext;
public TestClassCancellationTokenCtor(TestContext testContext)
{
_testContext = testContext;
}
[TestMethod]
[Timeout(5000, CooperativeCancellation = true)]
public async Task MyAsyncTest()
{
using var client = new HttpClient();
var response = await client.GetAsync(
"https://example.com", _testContext.CancellationToken);
Assert.IsTrue(response.IsSuccessStatusCode);
}
}
Aanbeveling
MSTest Analyzer-regel MSTEST0049 helpt bij het identificeren van asynchrone aanroepen waar TestContext.CancellationToken moet worden doorgegeven. Het biedt ook een codefixer om de wijziging automatisch toe te passen.
Gerelateerde analyses
De volgende analyses helpen het juiste gebruik van de TestContext klasse te garanderen:
- MSTEST0005 : de eigenschap TestContext moet een geldige indeling hebben.
- MSTEST0024 : Sla TestContext niet op in een statisch lid.
- MSTEST0033 : onderdrukt de eigenschap CS8618 voor TestContext.
- MSTEST0048 - Vermijd TestContext-eigenschappen in armaturenmethoden.
- MSTEST0049 - Flow TestContext CancellationToken.
- MSTEST0054 : de eigenschap CancellationToken gebruiken.