Последовательность юнит-тестов при запуске всех тестов в растворе - PullRequest
5 голосов
/ 01 декабря 2009

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

Если я хочу выполнить их все, есть несколько способов сделать это, которые приводят к разным результатам:

  • У меня есть файл списка тестов .vsmdi, где тесты упорядочены по проекту. Если я открою список и выполню тесты из редактора списка тестов, все в порядке.
  • Если я открою окно «Просмотр тестов», отсортирую тесты по проектам и выполню их, снова все в порядке.
  • Однако, если я запускаю тесты, выбирая «Тест -> Выполнить -> Все тесты в решении» в меню, они выполняются в случайном порядке, когда некоторые из них не выполняются, поскольку один из других тестовых проектов уже манипулировал тестом. дб.

Итак, вопрос в том, что определяет последовательность юнит-тестов при использовании третьего подхода? Есть ли способ указать список тестов по умолчанию в .testrunconfig?

Поскольку существуют обходные пути, проблема не является критической. Но любые мысли приветствуются. Спасибо.

1 Ответ

8 голосов
/ 01 декабря 2009

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

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

Причина, по которой я начинаю описывать это, заключается в том, что именно по этой причине MSTest не гарантирует порядок тестов. Хотя порядок может показаться (полу) детерминированным, на него нельзя полагаться. Некоторые другие фреймворки модульного тестирования (на ум приходит xUnit.NET) даже заходят так далеко, что запускают тесты в случайном порядке каждый раз, когда вы запускаете набор тестов. MSTest не так уж и велик, но вы не можете заказать свои юнит-тесты.

Тем не менее, если вы используете Visual Studio Team Suite или (я полагаю) Team Test, существует тип теста, называемый Ordered Test . Вы можете использовать это, чтобы указать, что все тесты (включая модульные тесты) должны выполняться в определенном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...