lukbl の回答に加えて、アセンブリ全体で同じことを行うことができるため、複数のテスト クラスがある場合は、vstest.console.exe の実行時にテストをグローバルに管理できます (呼び出している場合)。たとえば、複数回)。
vstest.console (または mstest) の使用方法に応じて注意が必要です。複数のテスト エージェント間で負荷分散を行っている場合、各テスト エージェントは独自の vstest.console.exe を実行するため、独自のアセンブリ レベルの値を持つことになるため、セッション管理は実行中のテストのグループによって制限されます。同じエージェント。このアプローチにより、次のコマンドで実行する一連のテスト全体を管理できるとしましょう: vstest.console.exe /filter: tests.dll
つまり、session_failed 変数のスコープ (クラス全体またはアセンブリ全体) に関係なく、同じクラスから別の vstest.console.exe 呼び出しで別のテストを実行すると、変数値またはコントロールが失われます。
そうは言っても、マルチクラス テスト シナリオの簡単なアプローチは次のとおりです。
[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");
}
そして、すべてのテスト初期化メソッドを一度に更新する簡単な方法があります。署名が同じ場合、regexp マッチングを使用して、Visual Studio ですべてを置き換えます。
(\s*)public void MyTestInitialize\(\)(\s*)(\r*\n)(\s*){(\r*\n)
交換:
$1public void MyTestInitialize()$3$4{$1\tif (TestSettings.SessionTestsFailed) Assert.Fail("Session failed, test aborted");
TestFinalize() についても同様です。