MSTest / VSTest повторная (повторная) логика - PullRequest
0 голосов
/ 22 ноября 2018

К сожалению, для 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 создает результат теста - возможно ли обновить результат теста после второй попытки до последнего результата?

1 Ответ

0 голосов
/ 12 июня 2019

MSTest Test Framework сама по себе не поддерживает собственную логику повторного запуска теста.
Пожалуйста, рассмотрите возможность использования MSTestEx набора расширений для MSTest Test Framework, который поддерживает логику повторного запуска теста:https://www.nuget.org/packages/MSTestEx/

...