Подтвердить что ты не робот

Как установить категорию тестирования для всех тестов в классе

Я использую MSTest, и я хочу установить одну и ту же категорию тестов для всех методов в тестовом классе сразу, не устанавливая атрибут TestCategory для каждого метода отдельно. Как это может быть сделано?

Наиболее удобным и очевидным способом было бы установить атрибут TestCategory в классе, но он может применяться только к методам.

Конечной целью является пропустить интеграционные тесты во время тестового запуска при регистрации TFS.

4b9b3361

Ответ 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 вы не можете решить свою проблему только потому, что атрибуты на С# являются метаданными и не могут использоваться как динамические значения.

Ответ 6

В VS 2017 это возможно (и выглядит частью обновления VS2012 1).

Вы можете поместить [TestCategory ("Интеграция")] в класс в своем модульном тесте и применить его ко всем тестам, а также [TestCategory ("Unit")] на ваших тестовых классах.

Затем вы можете использовать панель поиска тестового проводника для фильтрации по имени Trait = Unit, а в "Run All" будут выполняться только тесты, соответствующие вашему поиску.

Когда вы идете запускать эти тесты на своем сервере сборки, вы можете использовать переключатель типа /category: Unit для запуска только модульных тестов.