Neben lukbl Antwort, können Sie die gleiche Montageweit tun, so werden Sie ein globales Management auf den Tests, wenn Sie mehrere Testklassen haben, während vstest.console.exe-Zeit liefen gelassen (wenn Sie es zum Beispiel mehrere Male anrufen).
Vorsicht ist geboten, je nachdem, wie Sie vstest.console (oder mstest) einsetzen. Wenn Sie einen Lastenausgleich zwischen mehreren Testagenten durchführen, führt jeder Testagent seine eigene vstest.console.exe aus und verfügt daher über eigene Werte auf Assemblyebene. Daher wird die Sitzungsverwaltung durch die Gruppe der Tests eingeschränkt, die ausgeführt werden derselbe Agent. Nehmen wir an, dieser Ansatz gibt Ihnen die Verwaltung aller Tests, die Sie mit einem Befehl ausführen: vstest.console.exe/filter: tests.dll
Das bedeutet unabhängig vom Umfang Ihrer session_failed -Variable (klassenweit oder assembly-wide) Wenn Sie verschiedene Tests der gleichen Klasse mit verschiedenen vstest.console.exe-Aufrufen ausführen, verlieren Sie den Variablenwert oder das Steuerelement.
aber sagte, dass ein einfacher Ansatz für Multi-Class-Testszenario:
[TestClass]
public static class TestSettings
{
public static bool SessionTestsFailed = false;
[AssemblyInitialize]
public static void runsBeforeAnyTest(TestContext t)
{
TestSettings.SessionTestsFailed = false;
}
}
[TestClass]
public class Tests1
{
public TestContext TestContext { get; set; }
[TestInitialize()]
public void MyTestInitialize()
{
if (TestSettings.SessionTestsFailed)
Assert.Fail("Session failed, test aborted");
}
[TestCleanup]
public void MyTestFinalize()
{
if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed)
TestSettings.SessionTestsFailed = true;
}
[TestMethod]
public void test11()
{
Console.WriteLine("test11 ran");
Assert.Fail("fail the test");
}
[TestMethod]
public void test12()
{
Console.WriteLine("test12 ran");
Assert.Fail("fail the test");
}
}
[TestClass]
public class Tests2
{
public TestContext TestContext { get; set; }
[TestInitialize()]
public void MyTestInitialize()
{
if (TestSettings.SessionTestsFailed)
Assert.Fail("Session failed, test aborted");
}
[TestCleanup]
public void MyTestFinalize()
{
if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed)
TestSettings.SessionTestsFailed = true;
}
[TestMethod]
public void test21()
{
Console.WriteLine("test21 ran");
Assert.Fail("fail the test");
}
[TestMethod]
public void test22()
{
Console.WriteLine("test22 ran");
Assert.Fail("fail the test");
}
Und hier ist eine einfache Möglichkeit, alle Ihre Tests auf einmal initialisieren Methoden zu aktualisieren, wenn ihre Unterschrift das gleiche ist, regexp Matching Fund:
(\s*)public void MyTestInitialize\(\)(\s*)(\r*\n)(\s*){(\r*\n)
ersetzen:
$1public void MyTestInitialize()$3$4{$1\tif (TestSettings.SessionTestsFailed) Assert.Fail("Session failed, test aborted");
, Visual Studio alle ersetzen
und ähnlich für TestFinalize().
Ich fragte darüber auf msdn für TFS-Build-Server. No Go. Ich weiß nicht über vstest, tho. – Will
Sie haben mich an MSDN erinnert. Ich habe die gleiche Frage auf msdn gepostet, hoffentlich werden sie Antworten haben, dann kann ich hier posten, was auch immer die offizielle Meinung über die Angelegenheit ist.Ich denke, dass eine Flagge, die dies implementiert, verfügbar sein sollte. Aber es ist nirgends in der Dokumentation. – Bangonkali
Ich kann nicht glauben, dass das nicht möglich ist – thepirat000