Использование NUnit для функциональных тестов и гарантии последовательности выполнения и потоков

Я задал этот вопрос на NUnit-Discuss, но я понимаю, что эта группа не очень активна, поэтому я попробую здесь:

До сих пор мы использовали MSTests для некоторых функциональных тестов. Я знаю, что ни MSTest, ни NUnit не предназначены для функционального тестирования, но нам нужны эти тесты с простой интеграцией в Visual Studio.

Тесты будут запускать другие исполняемые файлы, подключаться, делать что-то, отключать и уничтожать процессы.

У нас возникли проблемы с MSTest в том смысле, что он запускал тесты в отдельном потоке и кажется, что выполнение некоторых тестов перекрывается между тестами, даже если выполняется последовательно.

Итак, я подумываю о переходе на NUnit.

У меня вопрос:

Можно ли настроить NUnit каким-либо образом, чтобы дать следующие гарантии:

  • Тесты будут выполняться последовательно в указанном порядке.
  • Тесты будут выполняться из одного потока.
  • Код TearDown одного теста будет полностью выполнен до того, как будет вызван код установки следующего теста.

Если да, то какой будет эта конфигурация, если она есть? Спасибо.


person Scrontch    schedule 09.12.2019    source источник


Ответы (1)


По умолчанию NUnit не выполняет никаких тестов параллельно. Если вы никогда не используете ParallelizableAttribute, тогда ваши тесты запускаются по одному.

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

NUnit не гарантирует, что все тесты будут выполняться из одного потока. Это, конечно, отдельный вопрос от распараллеливания. Отдельные потоки могут быть запущены для каждого потока в зависимости от указанных вами атрибутов. Вы можете, например, назначить некоторые тесты для запуска в однопоточной квартире, в то время как другие запускаются по умолчанию в MTA. Вы можете использовать RequiresThreadAttribute, который просит NUnit использовать новый поток для теста, который он украшает. Вы можете использовать SingleThreadedAttribute в классе, чтобы указать, что весь код в этом классе выполняется в одном потоке.

Одна уловка, которая в настоящее время доступна, но может отсутствовать во всех будущих выпусках, - это указать --workers = 0 в командной строке для nunit3-console. Это говорит NUnit просто запускать тесты без создания тестовых рабочих и дает путь выполнения, который больше напоминает путь NUnit V2.

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

person Charlie    schedule 09.12.2019
comment
Спасибо! Другой вопрос: если во время (One Time) SetUp возникает исключение, будет ли вызываться (OneTimeTearDown? - person Scrontch; 10.12.2019