Třída TestContext
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í.
- 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.
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();
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.