如果使用 vstest.console.exe 一项测试失败,如何停止测试?

Ban*_*ali 6 c# vstest

我有一个批处理文件,其中包含以下面类似形式定义的多个测试。

vstest.console.exe Test.dll /Settings:"test.runsettings" /Tests:"t1,t2,t3,t4,t5"
Run Code Online (Sandbox Code Playgroud)

测试按从 t1 到 t5 的顺序运行。但是,如果任何一项测试失败,我想停止 vstest。使用 vstest.console.exe 可以吗?

顺便说一句,我的 test.runsettings 的内容是

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <MSTest>
    <ForcedLegacyMode>true</ForcedLegacyMode> 
      <KeepExecutorAliveAfterLegacyRun>true</KeepExecutorAliveAfterLegacyRun> 
  </MSTest>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)

我已经检查了runsettings 的文档,似乎这种情况没有标志/属性。

小智 2

如果您可以选择,那么您可以引入基类来进行清理、初始化方法和TestContext属性的测试。

在清理方法中,您将检查测试是否失败,并通过触发Assert.FailTestInitialize不允许此后任何其他测试通过。

[TestClass]
public class BaseTest
{
    private static bool _failAllTests;
    public TestContext TestContext { get; set; }

    [TestInitialize]
    public void InitializeMethod()
    {
        if (_failAllTests)
        {
            Assert.Fail("Fail all tests");
        }
    }

    [TestCleanup]
    public void CleanUpMethod()
    {
        if (TestContext.CurrentTestOutcome == UnitTestOutcome.Failed)
        {
            _failAllTests = true;
        }
    }
}
[TestClass]
public class UnitTest1 : BaseTest
{
    [TestMethod]
    public void TestMethod1()
    {
        Assert.Fail("TestMethod1 failed!");
    }
    [TestMethod]
    public void TestMethod2()
    {
        Assert.IsTrue(true, "TestMethod2 passed!");
    }
}
Run Code Online (Sandbox Code Playgroud)