Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa
Klasa TestContext udostępnia przydatne informacje i narzędzia ułatwiające zarządzanie wykonywaniem testów. Umożliwia dostęp do szczegółów przebiegu testu i dostosowywania środowiska testowego. Ta klasa jest częścią przestrzeni nazw Microsoft.VisualStudio.TestTools.UnitTesting.
Uzyskiwanie dostępu do obiektu TestContext
Obiekt TestContext jest dostępny w następujących kontekstach:
- Metody ClassInitialize jako parametr dla AssemblyInitialize. W tym kontekście właściwości związane z przebiegem testowym nie są dostępne.
- Począwszy od wersji 3.6, metody ClassCleanup mogą opcjonalnie przyjmować jako parametr AssemblyCleanup. W tym kontekście właściwości związane z przebiegem testowym nie są dostępne.
- Jako właściwość klasy testowej. W tym kontekście dostępne są właściwości związane z przebiegem testu.
- Jako parametr konstruktora klasy testowej (począwszy od wersji 3.6). Ta metoda jest zalecana zamiast używania właściwości, ponieważ zapewnia dostęp do obiektu w konstruktorze. Chociaż właściwość jest dostępna tylko po uruchomieniu konstruktora. Dzięki temu można również zapewnić niezmienność obiektu i umożliwić kompilatorowi wymuszanie, że obiekt nie ma wartości 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
}
}
Lub przy użyciu narzędzia MSTest 3.6 lub nowszego:
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
}
}
Członkowie TestContext
Klasa TestContext zawiera właściwości przebiegu testu wraz z metodami manipulowania środowiskiem testowym. W tej sekcji omówiono najczęściej używane właściwości i metody.
Informacje o przebiegu testu
TestContext zawiera informacje o przebiegu testu, takie jak:
- TestContext.TestName — nazwa aktualnie wykonywanego testu.
- TestContext.CurrentTestOutcome — wynik bieżącego testu.
- TestContext.FullyQualifiedTestClassName — pełna nazwa klasy testowej.
- TestContext.TestRunDirectory — katalog, w którym jest wykonywany przebieg testu.
- TestContext.DeploymentDirectory — katalog, w którym znajdują się elementy wdrożenia.
- TestContext.ResultsDirectory — katalog, w którym są przechowywane wyniki testu. Zazwyczaj podkatalog TestContext.TestRunDirectory.
- TestContext.TestRunResultsDirectory — katalog, w którym są przechowywane wyniki testu. Zazwyczaj podkatalog TestContext.ResultsDirectory.
- TestContext.TestResultsDirectory — katalog, w którym są przechowywane wyniki testu. Zazwyczaj podkatalog TestContext.ResultsDirectory.
W programie MSTest 3.7 lub nowszym klasa TestContext udostępnia również nowe właściwości przydatne dla metod TestInitialize i TestCleanup:
-
TestContext.TestData — dane, które zostaną dostarczone do sparametryzowanej metody testowej lub
nulljeśli test nie jest sparametryzowany. - TestContext.TestDisplayName — nazwa wyświetlana metody testowej.
-
TestContext.TestException — wyjątek zgłoszony przez metodę testową lub zainicjowanie testu albo
null, jeśli metoda testowa nie zgłosiła wyjątku.
Testy oparte na danych
W programie MSTest 3.7 lub nowszym właściwość TestContext.TestData może służyć do uzyskiwania dostępu do danych dla bieżącego testu podczas TestInitialize i metod TestCleanup.
W przypadku ukierunkowania na platformę .NET framework, TestContext umożliwia pobieranie i ustawianie danych dla każdej iteracji w teście sterowanym danymi poprzez właściwości, takie jak DataRow i DataConnection (w przypadku testów opartych na DataSource).
Rozważmy następujący plik CSV TestData.csv:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
Możesz użyć atrybutu DataSource, aby odczytać dane z pliku 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));
}
}
}
Przechowywanie i pobieranie danych środowiska uruchomieniowego
Za pomocą TestContext.Properties można przechowywać niestandardowe pary klucz-wartość, do których można uzyskać dostęp w różnych metodach w tej samej sesji testowej.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Kojarzenie danych z testem
Metoda TestContext.AddResultFile(String) umożliwia dodanie pliku do wyników testu, dzięki czemu będzie on dostępny do przeglądu w danych wyjściowych testu. Może to być przydatne w przypadku generowania plików podczas testu (na przykład plików dziennika, zrzutów ekranu lub plików danych), które chcesz dołączyć do wyników 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.");
}
}
Możesz również użyć metod TestContext.Write lub TestContext.WriteLine, aby zapisywać niestandardowe komunikaty bezpośrednio w danych wyjściowych testu. Jest to szczególnie przydatne w celach debugowania, ponieważ zapewnia w czasie rzeczywistym informacje o logach w kontekście wykonywania testu.
Powiązane analizatory
Następujące analizatory pomagają zapewnić prawidłowe użycie TestContext klasy:
- MSTEST0005 — właściwość TestContext powinna mieć prawidłowy układ.
- MSTEST0024 — nie przechowuj elementu TestContext w statycznym elemencie członkowskim.
- MSTEST0033 — pomija właściwość CS8618 dla właściwości TestContext.
- MSTEST0048 — unikaj właściwości TestContext w metodach konstrukcyjnych.
- MSTEST0049 — Przepływ CancellationToken TestContext.
- MSTEST0054 — użyj właściwości CancellationToken.