あなたが複数のテストクラスを持っている場合、あなたはテストでグローバルな経営を持っていますので、あなたは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");
}
そして、ここでは、すべてのテストを更新するための簡単な方法です彼らの署名が正規表現のマッチングを使用して、同じであれば、一度にメソッドを初期化します置き換え
(\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");
を 検索:、Visual Studioは、すべてを置き換えますTestFinalize()の場合は
などとなります。
TFSビルドサーバーの場合、msdnでこれについて尋ねました。立ち入り禁止。 vstest、thoについて知りません。 – Will
あなたはMSDNを思い出しました。私はmsdnに同じ質問を掲示しました。うまくいけば、彼らは答えを得て、公式の問題が何であれ、ここに投稿することができます。私は、これを実装するフラグが利用可能であるべきだと思います。しかし、それはドキュメントのどこにもありません。 – Bangonkali
これは不可能だとは思わない – thepirat000