Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A
A TestContext osztály hasznos információkat és eszközöket biztosít a tesztvégrehajtás kezeléséhez. Lehetővé teszi a tesztfuttatás részleteinek elérését és a tesztkörnyezet módosítását. Ez az osztály a Microsoft.VisualStudio.TestTools.UnitTesting névtér része.
Az TestContext objektum elérése
A TestContext objektum a következő környezetekben érhető el:
- Az AssemblyInitialize paramétereként a ClassInitialize metódusokat. Ebben az összefüggésben a tesztfuttatáshoz kapcsolódó tulajdonságok nem érhetők el.
- A 3.6-os értéktől kezdődően, opcionálisan, a AssemblyCleanup paramétereként a ClassCleanup metódusokat. Ebben az összefüggésben a tesztfuttatáshoz kapcsolódó tulajdonságok nem érhetők el.
- Egy tesztosztály tulajdonságaként. Ebben az összefüggésben a tesztfuttatáshoz kapcsolódó tulajdonságok elérhetők.
- Egy tesztosztály konstruktorparamétereként (a 3.6-os verziótól kezdve). Ez a módszer ajánlott a tulajdonság használata során, mivel hozzáférést biztosít az objektumhoz a konstruktorban. Habár a tulajdonság csak a konstruktor lefutása után érhető el. Így biztosítható az objektum nem módosíthatósága, és lehetővé teszi, hogy a fordító kikényszerítse, hogy az objektum ne null értékű legyen.
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
}
}
Vagy az MSTest 3.6+-os verziójával:
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
}
}
TestContext tagok
A TestContext osztály tulajdonságokat biztosít a tesztfuttatásról, valamint a tesztkörnyezet manipulálására használható módszereket. Ez a szakasz a leggyakrabban használt tulajdonságokat és metódusokat ismerteti.
Tesztfuttatási információk
A TestContext információt nyújt a tesztfuttatásról, például:
- TestContext.TestName – a jelenleg futó teszt neve.
- TestContext.CurrentTestOutcome - az aktuális teszt eredménye.
- TestContext.FullyQualifiedTestClassName - a tesztosztály teljes neve.
- TestContext.TestRunDirectory - a könyvtár, ahol a tesztfuttatást végrehajtják.
- TestContext.DeploymentDirectory – az a könyvtár, ahol az üzembe helyezési elemek találhatók.
- TestContext.ResultsDirectory – a könyvtár, ahol a teszteredmények tárolása történik. Általában a TestContext.TestRunDirectoryalkönyvtára.
- TestContext.TestRunResultsDirectory – a könyvtár, ahol a teszteredmények tárolása történik. Általában a TestContext.ResultsDirectoryalkönyvtára.
- TestContext.TestResultsDirectory – a könyvtár, ahol a teszteredmények tárolása történik. Általában a TestContext.ResultsDirectoryalkönyvtára.
Az MSTest 3.7-ben és újabb verzióiban a TestContext osztály az TestInitialize és TestCleanup metódusokhoz is hasznos új tulajdonságokat biztosít:
-
TestContext.TestData – a paraméteres tesztmetódushoz megadott adatok, vagy
null, ha a teszt nincs paraméterezve. - TestContext.TestDisplayName – a vizsgálati módszer megjelenítendő neve.
-
TestContext.TestException – a vizsgálati módszer vagy a teszt inicializálása által okozott kivétel, vagy
null, ha a vizsgálati módszer nem adott kivételt.
Adatvezérelt tesztek
Az MSTest 3.7-es és újabb verzióiban a tulajdonság TestContext.TestData használható az aktuális teszt adatainak elérésére TestInitialize és TestCleanup metódusok során.
A .NET-keretrendszer megcélzásakor a TestContext lehetővé teszi az adatok lekérését és beállítását az egyes iterációkhoz egy adatvezérelt tesztben, olyan tulajdonságok használatával, mint a DataRow és a DataConnection (DataSource-alapú tesztekhez).
Fontolja meg a következő CSV-fájl TestData.csv:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
Az DataSource attribútummal beolvashatja az adatokat a CSV-fájlból:
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));
}
}
}
Futtatókörnyezeti adatok tárolása és lekérése
A TestContext.Properties használhatja az egyéni kulcs-érték párok tárolására, amelyek ugyanabban a tesztelési munkamenetben különböző metódusok között érhetők el.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Adatok társítása teszthez
A TestContext.AddResultFile(String) metódus lehetővé teszi egy fájl hozzáadását a teszteredményekhez, így az megtekinthető a teszt kimenetében. Ez akkor lehet hasznos, ha a teszt során olyan fájlokat hoz létre (például naplófájlokat, képernyőképeket vagy adatfájlokat), amelyeket a teszt eredményeihez szeretne csatolni.
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.");
}
}
Az egyéni üzenetek közvetlenül a tesztkimenetbe való írásához TestContext.Write vagy TestContext.WriteLine metódusokat is használhat. Ez különösen hasznos hibakeresési célokra, mivel valós idejű naplózási információkat biztosít a tesztvégrehajtási környezetben.
Lemondási jogkivonat
A TestContext rendszer egy olyan tulajdonságot CancellationToken tesz elérhetővé, amely akkor lesz jelezve, ha a teszt túllépi az időkorlátot vagy megszakítja a tesztfuttatást. Ezt a jogkivonatot át kell adnia az aszinkron műveleteknek, hogy azok együttműködve válaszoljanak a lemondásra. Ez különösen fontos időtúllépési attribútumok használatakor.
Mikor TestContext érhető el tulajdonságként:
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);
}
}
Amikor TestContext a konstruktoron át van injektálva (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);
}
}
Jótanács
Az MSTest-elemző szabály MSTEST0049 segít azonosítani az aszinkron hívásokat, ahol TestContext.CancellationToken át kell adni. Emellett egy kódjavítót is biztosít a módosítás automatikus alkalmazásához.
Kapcsolódó elemzők
Az alábbi elemzők segítenek biztosítani az TestContext osztály megfelelő használatát:
- MSTEST0005 – A TestContext tulajdonságnak érvényes elrendezéssel kell rendelkeznie.
- MSTEST0024 – Ne tárolja a TestContextet statikus tagban.
- MSTEST0033 – Elnyomja a CS8618-at a TestContext tulajdonság vonatkozásában.
- MSTEST0048 – A TestContext tulajdonságainak elkerülése a rögzítési módszerekben.
- MSTEST0049 – Flow TestContext CancellationToken.
- MSTEST0054 – A CancellationToken tulajdonság használata.