如何在 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);
}
}
}
使用此解决方案,您的测试将始终为绿色。
能否请您建议如何在 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);
}
}
}
使用此解决方案,您的测试将始终为绿色。