我们使用NUnit来执行集成测试。这些测试非常耗时。通常,检测故障的唯一方法是超时。
我希望一旦检测到单个故障,测试就会停止执行。
有办法做到这一点吗?
答案 0 :(得分:26)
使用nunit-console,您可以使用/ stoponerror命令行参数来实现此目的。
有关命令行参考,请参阅here。
答案 1 :(得分:13)
我正在使用NUnit 3,以下代码适用于我。
public class SomeTests {
private bool stop;
[SetUp]
public void SetUp()
{
if (stop)
{
Assert.Inconclusive("Previous test failed");
}
}
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
stop = true;
}
}
}
或者你可以把它变成一个抽象类并从中派生出来。
答案 2 :(得分:1)
这可能不是理想的解决方案,但它可以满足您的要求,即如果测试失败则忽略剩余测试。
[TestFixture]
public class MyTests
{
[Test]
public void Test1()
{
Ascertain(() => Assert.AreEqual(0, 1));
}
[Test]
public void Test2()
{
Ascertain(() => Assert.AreEqual(1, 1));
}
private static void Ascertain( Action condition )
{
try
{
condition.Invoke();
}
catch (AssertionException ex)
{
Thread.CurrentThread.Abort();
}
}
}
由于TestFixtureAttribute是可继承的,因此您可以创建一个基类,并在其上装饰此属性并在其中包含Ascertain protected方法,并从中派生所有TestFixture类。
唯一的缺点是,你必须重构所有现有的断言。