gpt4 book ai didi

mstest - 如何在第一次失败时停止 MsTest 测试的执行?

转载 作者:行者123 更新时间:2023-12-03 23:58:55 26 4
gpt4 key购买 nike

我们正在运行每晚构建,最终使用 MsTest 框架运行我们所有的 UnitTest。

我们必须有 100% 的通过率,所以如果一个失败了,其他的就没有意义了;因此,我们希望在第一个失败的测试中停止执行。

无论如何我们可以做到吗?

最佳答案

你真的确定要扔掉测试结果吗?

假设某人有一个糟糕的一天,并在您的代码中引入了多个错误 A、B 和 C。你可能只在星期一发现 A,所以你解决它,直到星期二你才知道问题 B,然后你直到星期三才解决 C。但是由于您错过了半周的测试覆盖率,周一引入的错误直到引入后几天才会被发现,而且成本更高,修复它们需要更长的时间。

如果在失败后继续运行测试不会花费太多,那么这些信息不是很有用吗?

也就是说,在您的测试库中组合一个修复程序不会那么难。让所有可能的测试失败代码路径设置一个静态变量 StopAssert.Failed = true; (可能通过包装对 Assert 的调用并捕获 AssertFailedExceptions 。然后只需将 [TestInitialize()] 方法添加到每个测试类以在失败后停止每个测试!

public class StopAssert
{
public static bool Failed { get; private set; }

public static void AreEqual<T>(T expected, T actual)
{
try
{
Assert.AreEqual(expected, actual);
}
catch
{
Failed = true;
throw;
}
}

// ...skipping lots of methods. I don't think inheritance can make this easy, but reflection might?

public static void IsFalse(bool condition)
{
try
{
Assert.IsFalse(condition);
}
catch
{
Failed = true;
throw;
}
}
}


[TestClass]
public class UnitTest1
{
[TestInitialize()]
public void Initialize()
{
StopAssert.IsFalse(StopAssert.Failed);
}

[TestMethod]
public void TestMethodPasses()
{
StopAssert.AreEqual(2, 1 + 1);
}

[TestMethod]
public void TestMethodFails()
{
StopAssert.AreEqual(0, 1 + 1);
}

[TestMethod]
public void TestMethodPasses2()
{
StopAssert.AreEqual(2, 1 + 1);
}
}

[TestClass]
public class UnitTest2
{
[TestInitialize()]
public void Initialize()
{
StopAssert.IsFalse(StopAssert.Failed);
}

[TestMethod]
public void TestMethodPasses()
{
StopAssert.AreEqual(2, 1 + 1);
}

[TestMethod]
public void TestMethodFails()
{
StopAssert.AreEqual(0, 1 + 1);
}

[TestMethod]
public void TestMethodPasses2()
{
StopAssert.AreEqual(2, 1 + 1);
}
}

关于mstest - 如何在第一次失败时停止 MsTest 测试的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com