Мои самые любимые функции: расширенное модульное тестирование в Visual Studio 11.

Данная публикация является переводом статьи из блога Jason Zander “ My Favorite Features: Unit Testing Enhancements in Visual Studio 11 ”.

Я написал несколько статей о моих самых любимых функциях Visual Studio 11, которыми я пользуюсь в личных разработках. В предыдущей публикации я говорил о расширенной поддержке JavaScript. Сегодня я хотел бы поговорить о новом модульном тестировании. Модульное тестирование является важным этапом в процессе разработки и то, чем мы все занимаемся в группе разработки Visual Studio. Я написал немало модульных тестов и для своих личных программных проектов.

Тестовые фреймворки от третьих лиц.

Разработчики, серьезно относящиеся к модульному тестированию, часто рассказывают, почему их любимый фреймворк – лучший. Разрабатывая Visual Studio 11 мы хотели предоставить людям первоклассные, сфокусированные на разработчиках функции, позволяющие использовать те инструменты, которые они захотят. Для добавления фреймворка для модульного тестирования в свою среду разработки, просто установите соответствующий плагин при помощи Visual Studio Extension Manager (на картинке ниже) или из Visual Studio Gallery.

Уже сейчас доступны плагины для многих фреймворков, включая:

  • NUnit
  • xUnit.net
  • MbUnit
  • QUnit
  • Jasmine.

Разумеется мы по-прежнему поддерживаем встроенный MS-Test для кода .NET и новый фреймворк для тестирования C++.

Создание тестов с NUnit.

Давайте рассмотрим пример использования NUnit. Команда NUnit выпустила адаптер для Visual Studio 11 Beta в тот же день, что и сама бета была выпущена, а недавно подготовила обновление, исправляющее некоторые ошибки. Для начала работы достаточно установить NUnit Test Adapter for Visual Studio 11 Beta отсюда.

В данном примере я использую тестовый проект, который представляет собой библиотеку классов .NET со ссылкой на NUnit.Framework.dll. Ниже – небольшой тест NUnit, демонстрирующий как все это работает.

Нажмите “Run All” в окне Unit Test Explorer и посмотрите на результаты.

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

Автоматический запуск тестов.

Поскольку вы пишите и код, и тесты, и запускаете тестирование между этими шагами, вас, возможно, утомляет переключаться от одного занятия к другому. В Visual Studio 11 вы можете настроить Test Explorer на автоматический запуск модульных тестов после каждой успешной сборки. Такой подход реально экономит время, поскольку это превращает запуск тестов в часть процесса сборки.

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

Для включения опции, просто переключите “Run Tests After Build” на панели инструментов Test Explorer.

Самое главное, что такой подход позволяет вам сосредоточится на коде, не отвлекаясь на другие окна в Visual Studio. Лишь если что-то пойдет не так, вам придется остановится, чтобы понять что происходит.

Отладка теста, когда что-то не так.

Когда тест “падает”, есть несколько способов разобраться что именно пошло не так. Во-первых, вы можете проверить Test Runner, который содержит богатую информацию об исключении. Если же этого не достаточно, может оказатся полезным провести отладку теста. В Visual Studio 11 вы можете отлаживать NUnit тесты точно так же, как и любые управляемые тесты. Для этого просто щелкните на тесте в Test Explorer и выберите “Debug Selected Tests”.

Анализ результатов тестов.

Поддерживается большое количество аналитики, которую вы захотите получить в ходе модульного тестирования. Наиболее распространенная – покрытие кода. Вы значительно упростили задачу сбора информации о покрытии кода для ваших модульных тестов и обеспечили поддержку независимых проектов модульного тестирования. Как показано на картинке ниже, выберите “Analyze Code Coverage” в Test Explorer.

Теперь, когда выполнение закончится, откроется окно Visual Studio Code Coverage Results и включится подсветка в редакторе, что поможет легко отыскать те места, где покрытие кодом следует расширить.

Вы также можете легко проверить покрытие для теста (или набора тестов) при помощи правого щелчка на том участке, который вы хотите проанализировать, и выбрать “Analyze Code Coverage”. Такой способ может оказаться очень полезным, когда вы хотите добавить тесты к существующему коду. Подсветка покрытия в редакторе позволяет точно увидеть какие части кода проверялись указанными тестами.

Модульное тестирование JavaScript в браузере.

Часть моего последнего приложения выполнялась в браузере и использовала массу новинок, появившихся в ASP.NET MVC и Visual Studio 11. Если вы хотите протестировать JavaScript, вы можете воспользоваться QUnit (проект модульного тестирования, используемый JQuery) с адаптером Chutzpah, который доступен в Visual Studio Gallery.

Как вы можете видеть, работа и запуск QUnit тестов происходит таким же образом, что и другие модульные тесты. Расширяемость модульных тестов в VS 11 делает использование дополнительных фреймворков модульного тестирования, на подобие QUnit, таким же простым, как получение (или создание) нужного плагина, поддерживающего выбранную систему.

Модульное тестирование двоичного кода на C++.

Как уже упоминалось ранее, мы также добавили возможность модульного тестирования двоичного кода при помощи нового фреймворка модульного тестирования для C++, поставляемого вместе со средой разработки. Мы рады добавить такую возможность, таким образом, вам не придется больше использовать ключ “/clr” или переходить на фреймворки от независимых производителей.

Вот – короткий пример:

В качестве примера, я рекомендую изучить Hilo Project, созданный командой Patterns & Practices, которое теперь включает и модульное тестирование C++.

Узнайте больше о модульном тестировании двоичного кода в Visual Studio 11 на MSDN.

Заключение.

В этой статье мы рассмотрели новые возможности модульного тестирования. Эти решения базируются на фокусировании на паре целей:

Гибкость – используйте тот тестовый фрейворк, который предпочитает ваша команда.

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

Я надеюсь, что у вас есть возможность опробовать новые возможности модульного тестирования Visual Studio 11. Для более подробной информации, пожалуйста, посетите MSDN.