如何在 MSTest 中强制将测试状态设置为 'Passed'?

How to force set test status to 'Passed' in MSTest?

能否请您建议如何在 MSTest 中强制将测试状态设置为 'Passed'? 假设我有 2 个 re运行s 相同的测试——一个失败了,第二个通过了,但结果是 'FAILED' 无论如何……我需要做到 'PASSED'。 这是重新 运行 测试的代码示例。但如果第一个 运行 失败并且第二个 运行 通过

,它仍然在最终输出中显示测试结果为 'Failed'
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);                    
        }
    }                
}

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);
        }
    }
}

使用此解决方案,您的测试将始终为绿色。