Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třída
Třída TestContext poskytuje užitečné informace a nástroje pro správu provádění testů. Umožňuje přístup k podrobnostem o testovacím spuštění a úpravě testovacího prostředí. Tato třída je součástí oboru názvů Microsoft.VisualStudio.TestTools.UnitTesting.
Přístup k objektu TestContext
Objekt TestContext je k dispozici v následujících kontextech:
- Parametrem pro metody AssemblyInitializea ClassInitialize . V tomto kontextu nejsou k dispozici vlastnosti související s testovacím spuštěním.
- Počínaje verzí 3.6 volitelně jako parametr pro AssemblyCleanup, metody ClassCleanup. V tomto kontextu nejsou k dispozici vlastnosti související s testovacím spuštěním.
- Jako vlastnost testovací třídy. V tomto kontextu jsou k dispozici vlastnosti související s testovacím spuštěním.
- Jako parametr konstruktoru třídy testu (počínaje verzí v3.6). Doporučuje se tento způsob před použitím vlastnosti, protože dává přístup k objektu v konstruktoru. Vlastnost je k dispozici pouze po spuštění konstruktoru. Tímto způsobem také pomáhá zajistit neměnnost objektu a umožňuje kompilátoru vynutit, aby objekt nebyl 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
}
}
Nebo s 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
}
}
Členové TestContext
Třída TestContext poskytuje vlastnosti testovacího spuštění spolu s metodami pro manipulaci s testovacím prostředím. Tato část popisuje nejčastěji používané vlastnosti a metody.
Informace o testovacím spuštění
TestContext poskytuje informace o testovacím spuštění, například:
- TestContext.TestName – název aktuálně spuštěného testu.
- TestContext.CurrentTestOutcome – výsledek aktuálního testu.
- TestContext.FullyQualifiedTestClassName – úplný název testovací třídy.
- TestContext.TestRunDirectory – adresář, ve kterém je spuštěn testovací běh.
-
TestContext.DeploymentDirectory – adresář, ve kterém jsou umístěny položky nasazení. Chcete-li tento adresář naplnit, použijte
DeploymentItemAttribute. - TestContext.ResultsDirectory – adresář, ve kterém jsou uloženy výsledky testu. Obvykle podadresář TestContext.TestRunDirectory.
- TestContext.TestRunResultsDirectory – adresář, ve kterém jsou uloženy výsledky testu. Obvykle podadresář TestContext.ResultsDirectory.
- TestContext.TestResultsDirectory – adresář, ve kterém jsou uloženy výsledky testu. Obvykle podadresář TestContext.ResultsDirectory.
- Počínaje verzí MSTest 3.9 TestContext.TestRunCount – počet spuštění aktuálního testu, počítá se od 1. Hodnota je větší než 1 při opakování testu s
[Retry].
Ve třídě TestContext v MSTest 3.7 a novějších jsou také nové vlastnosti, které jsou užitečné pro metody TestInitialize a TestCleanup:
-
TestContext.TestData – data, která budou poskytována parametrizované metodě testu, nebo
null, pokud test není parametrizován. - TestContext.TestDisplayName – zobrazovaný název testovací metody.
-
TestContext.TestException – výjimka vyvolaná buď testovací metodou nebo inicializací testu, nebo
null, pokud testovací metoda nevyvolala výjimku.
Testy řízené daty
V MSTest 3.7 a novějších lze vlastnost TestContext.TestData použít pro přístup k datům pro aktuální test během metod TestInitialize a TestCleanup.
Při cílení na rozhraní .NET Framework umožňuje TestContext načíst a nastavit data pro každou iteraci v testu řízeném daty pomocí vlastností, jako jsou DataRow a DataConnection (pro testy založené naDataSource).
Zvažte následující soubor CSV TestData.csv:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
Pomocí atributu DataSource můžete číst data ze souboru 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));
}
}
}
Ukládání a načítání dat modulu runtime
Pomocí TestContext.Properties můžete ukládat vlastní páry klíč-hodnota, ke kterým lze přistupovat v různých metodách ve stejné testovací relaci.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Note
Od verze MSTest 4.2 jsou do TestContext.Properties zahrnuty také kategorie testů z [TestCategory].
Počínaje verzí MSTest 4.3 se vlastní vlastnosti přidané do TestContext.Properties v [AssemblyInitialize] promítají do každé třídy a každého testu v sestavení a vlastnosti přidané v [ClassInitialize] se promítají do každého testu v této třídě. To umožňuje zařízením publikovat sdílený kontext, který testovací metody mohou číst.
Přistupovat k TestContext z aktuálního zásobníku volání
Počínaje MSTest 4.2 TestContext.Current vrátí aktuální test TestContext odkudkoli v zásobníku volání během provádění testovací metody. Toto rozhraní API je experimentální, používá [Experimental] atribut a může se změnit v budoucí verzi MSTest.
Přidružení dat k testu
Metoda TestContext.AddResultFile(String) umožňuje přidat soubor do výsledků testu a zpřístupnit ho ke kontrole ve výstupu testu. To může být užitečné, pokud během testu vygenerujete soubory (například soubory protokolu, snímky obrazovky nebo datové soubory), které chcete připojit k výsledkům testu.
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.");
}
}
K zápisu vlastních zpráv přímo do výstupu testu můžete také použít TestContext.Write nebo TestContext.WriteLine metody. To je zvlášť užitečné pro účely ladění, protože poskytuje informace o protokolování v reálném čase v kontextu provádění testu.
Token zrušení
Třída TestContext zpřístupňuje vlastnost CancellationToken, která je signalizována při vypršení časového limitu testu nebo přerušení běhu testu. Tento token byste měli předat asynchronním operacím, aby mohly reagovat na zrušení ve spolupráci. To je zvlášť důležité při použití atributů časového limitu .
Při přístupu k TestContext jako k vlastnosti:
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);
}
}
Při vkládání TestContext pomocí konstruktoru (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);
}
}
Návod
Pravidlo analyzátoru MSTest MSTEST0049 pomáhá identifikovat asynchronní volání, kde TestContext.CancellationToken by se měla předávat. Poskytuje také nástroj pro automatickou opravu kódu a aplikování změny.
Související analyzátory
Následující analyzátory pomáhají zajistit správné použití TestContext třídy:
- MSTEST0005 – vlastnost TestContext by měla mít platné rozložení.
- MSTEST0024 – Neukládejte TestContext ve statickém členu.
- MSTEST0033 – Potlačí CS8618 pro vlastnost TestContext.
- MSTEST0048 - Vyhněte se vlastnostem TestContext v metodách zařízení.
- MSTEST0049 – Tok zrušení v TestContextu CancellationToken.
- MSTEST0054 – použijte vlastnost CancellationToken.