К сожалению, для MStest / VStest нет собственной логики перезапуска тестов
Я пытаюсь реализовать собственную логику, например:
Тестовая часть:
static int testNum = 1;
[TestMethod]
public void RerunTestOnce_Test()
{
testNum = testNum + 1;
Console.WriteLine("Test started");
Assert.IsTrue(testNum == 3, $"Test Failed with number {testNum}");
}
Этот тест должен завершиться неудачей в первый раз и пройти второй раз, когда testNum достигнет значения 3.
UP: Это синтетический пример для эмуляции сбоя при первом запуске.Реальные тесты являются сложными и имеют методы поиска пользовательского интерфейса и другую работу с системой и сетью, и нет уверенности, что все будет хорошо во время большого и длинного набора тестов.
Существует специальный метод дляthis - RerunTestOnce () , вызываемый в TestCleanup:
[TestCleanup]
public void TestCleanup()
{
TestHelper.RerunTestOnce(TestContext, this);
}
А вот реализация RerunTestOnce в классе вспомогательного тестирования.В нем, используя Reflection & TestContext, мы получаем имена тестового метода и инициализирующего метода и запускаем их снова:
public static void RerunTestOnce(TestContext testContext, object testInstance)
{
if (testContext.CurrentTestOutcome == UnitTestOutcome.Failed)
{
var type = testInstance.GetType();
if (type != null)
{
var testMethod = type.GetMethod(testContext.TestName);
var initMethod = type.GetMethods().SingleOrDefault(m=>m.CustomAttributes.SingleOrDefault(a=>a.AttributeType.Name == "TestInitializeAttribute")!= null);
var cleanupMethod = type.GetMethods().SingleOrDefault(m => m.CustomAttributes.SingleOrDefault(a => a.AttributeType.Name == "TestCleanupAttribute") != null);
Console.WriteLine($"[WARNING] Method [{testMethod}] was failed in first attempt. Trying to rerun...");
try
{
initMethod.Invoke(testInstance, null);
testMethod.Invoke(testInstance, null);
}
catch
{
Console.WriteLine($"[ERROR] Method [{testMethod}] was failed in second attempt. Rerun finished.");
}
}
}
}
Все хорошо, со второй попытки тестовый метод проходит, но в конце я вижу Failedсообщение об ошибке результата и утверждения с первой попытки:
Test Failed - RerunTestOnce_Test
Message: Assert.IsTrue failed. Test Failed with number 2
Как и когда MSTest создает результат теста - возможно ли обновить результат теста после второй попытки до последнего результата?