如何让NUnit在第一次失败时停止执行测试

时间:2011-10-05 07:02:05

标签: nunit integration-testing

我们使用NUnit来执行集成测试。这些测试非常耗时。通常,检测故障的唯一方法是超时。

我希望一旦检测到单个故障,测试就会停止执行。

有办法做到这一点吗?

3 个答案:

答案 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类。

唯一的缺点是,你必须重构所有现有的断言。