NUnit, как мне выполнить исходный код до и после запуска набора тестов

NUnit тесты различных сборок собираются и выполняются в рамках TestSuite. TestSuites является *.nunit проект, созданный с помощью NUnit GUI-runner.

Для конкретных целей тестирования мне нужно выполнить скрипт до, а также после выполнения всех тестов в этом .nunit Тестирование.

Как я могу добиться этого, сохраняя уверенность в том, что скрипт не выполняется где-то посередине TestSuite. Порядок выполнения тестовых случаев!


Состав:

TestSuite_AllTests.nunit
    -> ### Run Script BEFORE ###
    -> Assembly1.Test
        -> TestClass1
            -> TestCase1
            -> TestCase2
        -> TestClass2
            -> TestCase1
            -> TestCase2
    -> Assembly2.Test
        -> TestClass1
            -> TestCase1
            -> TestCase2
    -> ### Run Script AFTER ###

1 ответ

Решение

Определите свой Suite и затем добавьте два метода с атрибутами в класс:

  • [TestFixtureSetUp] для кода, выполняемого до набора,
  • [TestFixtureTearDown] для кода, выполняемого после набора.

Пример кода:

public class AllTests
{
    [TestFixtureSetUp]
    public void Setup()
    {
        Console.WriteLine("### Run Script BEFORE ###");
    }

    [TestFixtureTearDown]
    public void Teardown()
    {
        Console.WriteLine("### Run Script AFTER ###");
    }

    [Suite]
    public static IEnumerable Suite
    {
        get
        {
            var suite = new ArrayList();
            suite.Add(new Assembly1.TestClass1());
            suite.Add(new Assembly1.TestClass2());
            suite.Add(new Assembly2.TestClass1());
            return suite;
        }
    }
}

Затем запустите NUnit GUI или NUnit Console с помощью параметра /fixture: командной строки.

Например:

nunit-console /fixture:NUnit.Tests.AllTests nunit.tests.dll

Выход для вышеуказанного кода будет следующим:

### Run Script BEFORE ###
***** Assembly1.TestClass1.Test1
***** Assembly1.TestClass1.Test2
***** Assembly1.TestClass2.Test1
***** Assembly1.TestClass2.Test2
***** Assembly2.TestClass1.Test1
### Run Script AFTER ###

Однако вы не можете сохранить такой пакет как файл.nunit.

Как отмечено в документации NUnit Suite:

Поддержка NUnit для пользовательских наборов в настоящее время имеет два ограничения:

  1. Невозможно включить отдельные тестовые примеры непосредственно в пакет с использованием нового подхода. Любой, кто захочет это сделать, должен будет использовать старый подход и создать объект, производный от NUnit.Core.TestCase. Это не рекомендуется, так как требует ссылки на сборку ядра.
  2. Наборы в настоящее время не отображаются в графическом интерфейсе или запускаются автоматически любым бегуном, когда они встречаются. Историческая цель механизма Suite состояла в том, чтобы обеспечить способ агрегирования тестов на верхнем уровне каждого запуска. Следовательно, они поддерживаются только при использовании с параметром / fixture в консоли или командной строке графического интерфейса.

Подходы к устранению этих ограничений изучаются в рамках планирования будущих выпусков NUnit.

Другие вопросы по тегам