Проведение модульных тестов и интеграционных тестов отдельно с использованием 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 может иметь поддержку для запуска тестов только с определенной категорией, поэтому вы можете проверить это.