Иерархия тестовых категорий Visual Studio 2012 (Test Explorer)

Я тестирую довольно большой проект (C#, VS2012), и мне нужно организовать свой модульный тест в иерархии тестов (например, теперь у меня 43 тестовых случая). Мне действительно нужна иерархия.

У меня уже определены категории тестов, и тестовый проводник показывает тестовые примеры по признакам. У меня есть категории таким образом (один тест имеет несколько категорий)

  • TestCase01: MainTestType, SubTestType, SubsubTestType
  • ...
  • TestCase10: MainTestType, SubTestType, SubsubTestType
  • TestCase11: MainTestType, SubTestType2, SubsubTestType2
  • ...
  • TestCase15: MainTestType, SubTestType2, SubsubTestType2

Определяется так:

    [TestMethod]
    [TestCategory("MainTestType")]
    [TestCategory("SubTestType")]
    [TestCategory("SubsubTestType")]
    public void MyTestCase()
    { /* etc. */

Но Test Explorer показывает следующее:

  • MainTestType: все тесты, имеющие категорию MainTestType
  • SubTestType: все тесты, имеющие категорию SubTestType
  • так далее...

Поэтому я очень скучаю по иерархии. Я пробовал "Cat1\Cat2\Cat3" или даже с /. Но иерархия не отображается. Вы знаете, как это сделать, или бесплатный аддон, который может сделать это для меня?

Мне также понадобятся эти типы категоризации, потому что мы часто запускаем тесты из командной строки, а mstest.exe может запускать тесты для одной категории (например, для всех MainTestType или SubTestType). (Я придерживаюсь mstest, потому что половина команды использует vs2010). Но решения достаточно для vs2012.

Заранее спасибо.

4 ответа

Решение

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

  • построить проект
  • запустить MSText для всех тестов -> .trx output
  • простая программа winforms/wpf, которая анализирует.trx, получает контрольные примеры и отображает их в виде дерева
  • теперь мы можем запустить mstest из этого приложения для выбранного узла -> создает вывод.trx (который можно открыть в VS)

Я использовал.trx, потому что таким образом мне не нужно разбирать сборку, mstest.exe делает это. Тестовые категории сделаны следующим образом:

[TestCategory("MainTestType")]
[TestCategory("MainTestType/SubTestType")]
[TestCategory("MainTestType/SubTestType/SubsubTestType")]

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

Тестовый проводник показывает только группы, следующие макету TestFilter/InnerTests.

Вкладка "Новый тестовый проводник" является универсальным контейнером. Используя определенные адаптеры / надстройки / плагины, вы можете интегрировать другие тестовые среды (NUnit, xUnit, Qunit, ...) в Test Explorer ... но эти адаптеры должны следовать интерфейсу Test Explorer.

Так что он изначально не поддерживается вкладкой Test Explorer, в прошлом я не нашел способа расширить вкладку Test Explorer.

Возможно, другая тестовая среда позволит вам иметь иерархию, но это будет в другой пользовательской вкладке и с другим атрибутом (TestCategory является атрибутом MSTest).

Просто для информации, вы можете объединить черты в окне Test Explorer таким образом

Trait:"MainTestType1"  Trait:"SubTestType3"

Для группировки в VS2010 используйте .vsmdi файлы, которые можно открыть в Test List Editor,

Насколько VS2012:

Обновление 1 для Visual Studio 2012 http://www.microsoft.com/visualstudio/eng/visual-studio-update добавило усовершенствования для поддержки как группировки, так и фильтрации по проекту и признакам (категории). Использование этих функций подробно описано в этом сообщении в блоге, http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/09/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1-using-traits-in-the-unit-test-explorer.aspx

Группировка и фильтрация по классу завершены и будут доступны в обновлении 2.

Я предлагаю вам переместить ваши категории в пространство имен, чтобы вы могли видеть плоскую иерархию в окне TestView в столбце FullClassName.

Вы можете немного обмануть, сделав черту вашего уровня 2 конкатенацией значений первых двух уровней. Так что если уровень 1 - это животное, а уровень 2 - это млекопитающее, у вас может быть черта "Animal.Mammal". В Test Explorer вы получите узел для Level1 [Animal]другое для Level1 [Plant], а затем один для Level2 [Animal.Tiger], Я считаю, что фильтр поддерживает совпадения подстрок, так что это один из способов сортировки. Вы все еще не получаете представление дерева (хотя, если вы были связаны и решительно настроены, вы могли бы попробовать расширенные символы ascii art pipe, такие как старая команда дерева DOS).

У вас также все еще есть проблема, заключающаяся в том, что вы не можете объединить различные черты (например, все птицы будут вместе в списке вниз).

С другой стороны, обеспечить иерархическую структуру, допуская n-кортежей признаков, было бы неудобно. Это должно было бы ограничить элементы, находящиеся в нескольких путях от вершины иерархии, обнаруживать и сообщать о циклах, использовать древовидный элемент управления поверх (или с помощью матрицы) того, что там сейчас. Кроме того, когда вы реорганизуете код и хотите, чтобы тесты располагались параллельно, слишком много существующей структуры может вызвать головную боль.

Другие вопросы по тегам