Проведение модульных тестов и интеграционных тестов отдельно с использованием MSTest

Мы используем Visual Studio 2010 Ultimate с тестами, написанными на MSTest. Оба наших модульных теста и интеграционные тесты * написаны в MSTest.

** По нашему определению, тест интеграции - это MSTest TestMethod, который требует времени для запуска и/или вызова внешних компонентов, таких как база данных или веб-службы. *

Я ищу способ легко отфильтровать интеграционные тесты, так что только те тесты модулей запускаются без всех тестов интеграции.

Мои идеи до сих пор:

  • Отметьте тесты интеграции с атрибутом [Ignore]. Это работает, но это настоящая боль, когда вы хотите запустить интеграционные тесты.

  • Назначьте атрибут [TestCategory] для разных типов тестов. Это позволяет запускать их отдельно, но только через панель Test View. Вы не можете использовать CTRL + R, A (выполнить все тесты в решении) или другие похожие ярлыки/горячие клавиши.

  • Тесты интеграции находятся в отдельном проекте, есть ли что-то, что можно было бы сделать, чтобы остановить их на уровне проекта? Пока он легко переключается.

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

Есть ли у кого-нибудь другие предложения? Существуют ли какие-либо плагины, которые могут помочь с этим?

Ответы

Ответ 1

Я рекомендую иметь разные проекты (или проекты) для тестов интеграции, потому что в зависимости от вашего бегуна единственный реальный способ запускать или не запускать тесты во всех бегунах - включать или не включать библиотеку тестовых классов.

Но я также рекомендую, если вы используете MSTest, использовать TestCategoryAttribute для тегов не-модульных тестов. Затем вы можете "фильтровать" тесты, которые должны быть запущены в Test View с MSTest.

Бегуны, такие как Resharper и, по-видимому, TestDriven.net(http://bit.ly/tmtYC2) позволяют затем отфильтровывать те тесты из общих одноблочных тестов.

Ответ 2

Если ваш проект unit test находится в отдельном пространстве имен, вы можете использовать сочетание клавиш CTRL+R, T для запуска всех тестов в текущем контексте (т.е. namespace MyApp.Tests.Unit). Для этого поместите курсор сразу после открытия фигурной скобки в предложении пространства имен любого класса unit test.

Ответ 3

У меня есть предложение, но вам это не понравится.

Заблокировать MSTest полностью, в то время как другие структуры unit test эволюционировали MSTest, как почти остановленные во времени. Да, это имеет большое преимущество интеграции непосредственно с VS, но если я не ошибаюсь, что изменится в VS 2011, который обеспечит собственную поддержку пользовательской интеграции unit test runners.

(Примечание: остановленная во времени часть может быть неверной, потому что я признаю, что не уделяю много внимания MSTest, так как я использовал ее экономно с VS 2008)

Я использую NUnit и отделяю свои модульные тесты от тестов интеграции, используя другой проект библиотеки классов. Затем я автоматизирую запуск тестов с помощью бегуна командной строки Gallio, что позволяет мне настраивать отдельные сценарии для запуска тестов на единицу и интеграции.

Наконец, личные мнения в сторону, я не уверен, но плагин TestDriven.net может иметь поддержку для запуска тестов только с определенной категорией, поэтому вы можете проверить это.