Я в настоящее время сталкиваюсь со следующей проблемой:
Мы ввели модульные тесты в наше родное приложение на языке c ++ с помощью встроенной среды модульных тестов Microsoft, включенной в Visual Studio 2015 Microsoft::VisualStudio::CppUnitTestFramework
,
Для запуска модульных тестов в Visual Studio мы используем Test-Explorer
как видно на рисунке 1. Добавив method attribute
к Test-Method
(как показано на рисунке 2) Test-Explorer
позволяет сортировать и фильтровать по атрибуту (как видно на рисунке 3).
Все это работает без проблем. У нас возникла проблема, когда мы попытались внедрить эти модульные тесты в нашу систему непрерывной интеграции (CI).
Для запуска юнит-тестов с консоли мы используем vstest.console.exe
, который находится в: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
, Официальную документацию можно найти Вот.
На следующем снимке экрана показано, как успешно проходят тесты при использовании консоли:
Добавление логгера и вывод файлов в .trx тоже хорошо работает. Что значит НЕ Однако работа заключается в применении фильтра для определения тестов с конкретными атрибутами. Согласно документации, что-то подобное должно быть возможно с помощью /TestCaseFilter:
-переход. Следующий скриншот показывает полученную ошибку:
Это переводится как: «Ни один тест не соответствует фильтру, поскольку он содержит одно или несколько недопустимых свойств (TakesLong). Укажите выражение фильтра, содержащее допустимые свойства (TestCategory, Priority, FullyQualifiedName, Name) и повторите попытку».
Кто-нибудь знает эту проблему или есть идеи, как ее исправить? Конечная цель состоит в том, чтобы иметь возможность исключить определенные тесты (очень долго / нужен аппаратный ключ и т. Д.).
С наилучшими пожеланиями, LorToso
Я тоже столкнулся с этой проблемой, и, к сожалению, похоже, что нам просто не повезло. vstest.console.exe поддерживает только ограниченное количество фильтров для C ++ и C #.
Подход, к которому я собираюсь перейти, состоит в том, чтобы разделить тесты на разные модули, чтобы я мог запускать модульные тесты для ночных сборок и сборок CI, а также интеграционные тесты (например, для базы данных) только для релизов.
Кроме того, вы можете разделить их по пространству имен в том же модуле и использовать фильтр FullyQualifiedName. К сожалению, условия ‘! ~’ Также нет, поэтому вам, возможно, придется как-то обойти это.
Других решений пока нет …