В дополнении к ответу 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");
}
А вот простой способ обновить все ваши испытания инициализации методы сразу, если их подпись то же самое, с помощью сопоставления регулярных выражений , визуальная студия заменить все: найти:
(\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().
Я спросил об этом на msdn для серверов сборки TFS. Нет. Не знаю о встесте, тo. – Will
Вы напомнили мне MSDN. Я отправил тот же вопрос в msdn, надеюсь, у них будут ответы, тогда я могу опубликовать здесь все, что должно быть принято официальным лицом.Я думаю, что флаг, который реализует это, должен быть доступен. Но это нигде в документации. – Bangonkali
Не могу поверить, что это невозможно – thepirat000