Как принудительно установить статус теста «Пройдено» в MSTest? - PullRequest
0 голосов
/ 28 апреля 2020

Подскажите, пожалуйста, как принудительно установить состояние теста «Пройдено» в MSTest? Скажем, у меня есть 2 повторения одного и того же теста - один не пройден, второй пройден, но в любом случае результат «НЕИСПРАВЕН» ... Мне нужно сделать «ПРОЙДЕНО». Вот пример кода, который повторно запускает тесты. Но он все равно показывает результат теста как «Неудачный» в конечном выводе, если первый запуск не удался, а второй проход пройден

protected void BaseTestCleanup(TestContext testContext, UITestBase type)
{ 
    if (testContext.CurrentTestOutcome != UnitTestOutcome.Passed)
    {
        if (!typeof(UnitTestAssertException).IsAssignableFrom(LastException.InnerException.GetType()))
        {
            var instanceType = type.GetType();
            var testMethod = instanceType.GetMethod(testContext.TestName);
            testMethod.Invoke(type, null);                    
        }
    }                
}

1 Ответ

0 голосов
/ 28 апреля 2020

TestCleanup метод слишком поздно для проверки UnitTestOutcome. Если по какой-либо причине вы хотите запустить тест дважды, вам нужно создать свой собственный TestMethodAttribute и переопределить там Execute метод. Вот пример, как вы можете это сделать:

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    public class MyTestMethodAttribute : TestMethodAttribute
    {
        public override TestResult[] Execute(ITestMethod testMethod)
        {
            TestResult[] results = base.Execute(testMethod);

            bool runTestsAgain = false;

            foreach (TestResult result in results)
            {
                if (result.Outcome == UnitTestOutcome.Failed)
                {
                    result.Outcome = UnitTestOutcome.Passed;
                    runTestsAgain = true;
                }
            }

            if (runTestsAgain)
            {
                // Run them again I guess...
            }

            return results;
        }
    }

    [TestClass]
    public class UnitTest1
    {
        [MyTestMethod]
        public void TestMethod1()
        {
            Assert.IsTrue(false);
        }
    }
}

С этим решением ваши тесты всегда будут зелеными.

...