Как заставить NUnit прекратить выполнение тестов при первом сбое - PullRequest
13 голосов
/ 05 октября 2011

Мы используем NUnit для выполнения интеграционных тестов. Эти тесты очень трудоемки. Часто единственный способ обнаружить сбой - это тайм-аут.

Я бы хотел, чтобы тесты прекратились, как только обнаружился один сбой.

Есть ли способ сделать это?

Ответы [ 3 ]

26 голосов
/ 29 января 2013

Используя nunit-console, вы можете добиться этого, используя параметр командной строки / stoponerror.

См. здесь для ссылки на командную строку.

13 голосов
/ 11 января 2017

Я использую 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;
        }
    }
}

В качестве альтернативы вы можете сделать это абстрактным классом и наследовать его.

1 голос
/ 05 октября 2011

Возможно, это не идеальное решение, но оно делает то, что вам требуется, т.е. игнорирует оставшиеся тесты, если тест не пройден.

[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 является наследуемым, вы можете потенциально создать базовый класс с этим атрибутом, украшенным им, и иметь в нем защищенный метод Assure и получить из него все классы TestFixture.

Единственным недостатком является то, что вам придется рефакторинг всех ваших существующих утверждений.

...