Как установить категорию тестирования для всех тестов в классе
Я использую MSTest, и я хочу установить одну и ту же категорию тестов для всех методов в тестовом классе сразу, не устанавливая атрибут TestCategory для каждого метода отдельно. Как это может быть сделано?
Наиболее удобным и очевидным способом было бы установить атрибут TestCategory в классе, но он может применяться только к методам.
Конечной целью является пропустить интеграционные тесты во время тестового запуска при регистрации TFS.
Ответы
Ответ 1
Я искал что-то подобное, и я пришел к решению, которое действительно хорошо работает для моих целей.
Это означает, что не устраняет проблему применения TestCategory для каждого класса, , но вы можете использовать аргумент командной строки /test:
для mstest
для укажите строку поиска для соответствия любой части полного имени метода теста. Это означает, что вы можете в целом соответствовать классу или пространству имен или любой другой строке поиска, к которой вы можете прийти, которая будет соответствовать целевым тестам. И если это не так, вы можете использовать аргумент /test:
несколько раз. То есть:
> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace
/test:My.FullyQualified.OtherNamespace.OtherClass
Дополнительная информация
Ответ 2
Конечная цель - пропустить интеграционные тесты во время тестового запуска на TFS при регистрации по прибытии.
Есть и другие способы сделать это. В ваших сборках TFS вы можете установить, какие юнит-тесты вы хотите запустить, в зависимости от их имени сборки.
Как поведение по умолчанию, он будет запускать все модульные тесты в сборках, которые имеют "тест" в их имени. Простое исправление было бы переименовать ваши тесты интеграции на то, что не включает "тест".
Если вы хотите использовать категории, вы можете попробовать использовать AOP. Например, с помощью Postsharp вы можете создать аспект в своей тестовой сборке интеграции, который помещает атрибут в метод. Затем включите аспект для всех общедоступных методов в вашей сборке интеграции, если все тесты сгруппированы в одну dll или в каждом тестовом классе интеграции.
Ответ 3
Один из способов обойти это ограничение - поставить категорию теста в начале каждого метода тестирования. Например, назовите свои модульные тесты
public void UnitTestDoSomething_ExpectThis()
и ваш интеграционный тест
public void IntegrationTestDoSomething_ExpectThis()
Затем, когда вы делаете свой запрос TFS для получения тестов интеграции, вы можете сделать
Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]
Хотя это не идеальное решение, это поможет вам отличить ваши тесты от кода и TFS. Кроме того, вы можете посмотреть пути к области и итерации.
Ответ 4
Вы можете группировать "Имя класса" в панели "Проводник".
С помощью тестового атрибута TestCategory вы не можете решить свою проблему только потому, что атрибуты на С# являются метаданными и не могут использоваться как динамические значения.
Ответ 5
Чтобы настроить [TestCategory]
на уровне класса, установите "MSTest V2" TestFramework с помощью NuGet.
Ссылка: https://blogs.msdn.microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/
Ответ 6
В VS 2017 это возможно (и выглядит частью обновления VS2012 1).
Вы можете поместить [TestCategory ("Интеграция")] в класс в своем модульном тесте и применить его ко всем тестам, а также [TestCategory ("Unit")] на ваших тестовых классах.
Затем вы можете использовать панель поиска тестового проводника для фильтрации по имени Trait = Unit, а в "Run All" будут выполняться только тесты, соответствующие вашему поиску.
Когда вы идете запускать эти тесты на своем сервере сборки, вы можете использовать переключатель типа /category: Unit для запуска только модульных тестов.