Как исключить определенные тесты в Visual Studio Test Runner?

у меня есть атрибуты для определенных тестов, которые я в идеале не хочу запускать при каждой сборке. Большинство моих тестов-это обычные модульные тесты, и я хочу, чтобы они запускались при каждой сборке.

Итак: как я могу исключить тест по категориям или типу проекта?

например, я хотел бы исключить CodedUItests:

[CodedUITest]
public class SearchViewTests

...или исключить тесты в данном TestCategory:

[TestMethod]
[TestCategory("Database Integration")]
public void ContactRepositoryGetByIdWithIdExpectCorrectContact()

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

Первоначально этот вопрос был о Visual Studio 2012, поэтому я бы предпочел решения, которые работают в этой версии и выше.

7 ответов


единственное " решение "(или лучшее обходное решение), которое я нашел, - это указать фильтр" FullName". В основном я обычно структурирую свое решение как

  • проект
  • Projectа.Unit-тестов
  • Projectа.IntegrationTests

и так далее. Теперь я могу указать фильтр в Проводнике тестов, например FullName: "UnitTests" который, кажется, работает.
(Я ожидал, что смогу использовать регулярное выражение в имени поиска, но, похоже, это не так поддерживаемый.)

enter image description here


TL; DR версия:

Test explorer showing -Trait:"CategoryName" filter

другие ответы прокомментировали обходные пути и использовать более поздние Traits параметры. Тем не менее, никто не говорит вам, как конкретно исключить тесты для признака. Для этого просто используйте - (минус) для отрицания фильтра в поле поиска, например:

-Trait:"DatabaseIntegration"

Это исключит все тесты с этой чертой. The документация MSDN по этим функциям имеет следующие объяснение:

чтобы исключить подмножество результатов фильтра, используйте следующий синтаксис:

FilterName:"Criteria" -FilterName:"SubsetCriteria"

например,

FullName:"MyClass" - FullName:"PerfTest"

возвращает все тесты, которые включают " MyClass "в свое имя, за исключением тех тестов, которые также включают" PerfTest " в свое имя.


в Visual Studio 2012 Update 1 CTP добавлена поддержка группировки по проектам и категориям (признакам) в Обозревателе тестов. http://blogs.msdn.com/b/visualstudioalm/archive/2012/10/08/visual-studio-2012-update-1-ctp.aspx http://go.microsoft.com/fwlink/?LinkId=268021


вы можете использовать фильтр поиска в текстовом Проводнике.

unit test explorer

в новом тестовом Exlorer, поставляемом с 2012, Вы можете группировать тесты по "результатам тестирования", "имя файла",... etc но в RTM build group / search by 'TestCategory' нет из Проводника тестов. Однако в командной строке и TeamBuild есть фильтр на основе TestCategory (запуск выборочных модульных тестов в VS 2012 RC с помощью TestCaseFilter) в VS2012.

от члена команды VS dev, они понял важность этой недостающей черты. Он находится в отставании, и он должен быть доступен в сборках/обновлениях furutre.

следующий блог предоставляет более подробную информацию: http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx


в Проводнике тестов есть фильтр, который вы можете применить. Черта: "UnitTest"этот фильтр будет отбирать только тесты с атрибутом TestCategory ("UnitTest"), игнорируя другие.


немного поздно в partyI была та же проблема, когда все разработчики столкнулись с разрушительным CodedUI при запуске всех модульных тестов в решении. Мой обходной путь-добавить следующее В AssemblyInitializer проекта CodedUI:

    if(!ConfigurationManager.AppSettings["MachinesToRunCodedUI"].Split(',').Contains(Environment.MachineName))
        Assert.Inconclusive("CodedUI Tests are skipped.");

только когда машина является частью этого списка MachinesToRunCodedUI, она будет запускать тесты CodedUI.


вы видели эту статью? как: группировать и запускать автоматические тесты с помощью категорий тестов

Я еще не пробовал это с VS 2012, но он все еще может быть действительным. Насколько я мог видеть, нет ссылок на TFS, поэтому это должно указывать на обычный vs test runner.