Вход |  Регистрация

Все Тэги

Изолированное тестирование: Part II

09.09.2013377 просм.

Мы продолжаем серию заметок на основе книги “Testing for Continuous Delivery with Visual Studio 2012″. В предыдущей заметке Вы могли узнать об изолированным тестировании. В этой заметке, как и было обещано, мы продолжим тему тестирования: расскажем об отладке ПО, «оболочках» в Visual Studio, IntelliTrace и многом другом.

«Оболочки»

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

Например, DateTime.Now недоступен для изменений. Для тестирования хотелось бы подменить его, потому что настоящая реализация возвращает разные значения при каждом вызове. Поэтому используем оболочку:

 

В итоге любой вызов оригинального метода перехватывается и перенаправляется на оболочку. Оболочки настраиваются так же, как и заглушки. Например, чтобы сделать оболочку для DateTime, в проекте нужно выбрать ссылку на System, и нажать Add Fakes Assembly. Имена классов для оболочек состоят из префикса “Shim” и первоначального имени типа.

Примечание: Обращаем внимание на ShimsContext: если его убрать, то все заглушки, созданные пока он был активен, будут удалены.

Примечание: Может появляться сообщение об ошибке, предупреждающее, что пространство имен Fakes не существует. Если избавиться от всех других ошибок, то все будет работать корректно.

Оболочка в данном примере изменяет статическое поле. Можно создавать оболочки, перехватывающие вызовы к конструкторам, методам или полям всех экземпляров класса или к конкретному экземпляру. Подробнее можно узнать в теме MSDN Using shims to isolate calls to non-virtual functions in unit test methods.

«Оболочки» в Visual Studio 2010

В Visual Studio 2010 нужно использовать дополнение под названием Moles. Правила наименования немного отличаются: метод заглушки начинается с “M”, а не с “Shim”. Также нужно было добавлять атрибут к тестовому классу:

 

Дополнение Moles патчит тестируемый код, перехватывая вызовы указанных методов. Оно генерирует набор зеркал классов, на которые ссылается тестируемый код. Для того чтобы указать конкретный класс, нужно добавить префикс “M” к имени класса – например, MDateTime или System.MFile. Можно указывать классы из любых используемых ресурсов. Для того, чтобы выбрать метод для перенаправления, используется IntelliSense. При перенаправлении к полю, к имени добавляются “Get” и “Set”. Перенаправления к методам включают в себя названия типов параметров, например, MDateTime.IsLeapYearInt32.

Как и при работе с имитациями, в тестовом коде можно настраивать поведение и регистрацию вызовов.

Примечание: Moles из Visual Studio 2010 нужно переработать, чтобы превратить в Fakes в Visual Studio 2012.

Тестирование и отладка

При обычных запусках тестов рекомендуется не использует отладку. Чаще всего предполагается, что тесты должны завершиться без ошибок, и отладка просто замедляет их прохождение. Если же тест выдал ошибку, в фреймворке MSTest в в Visual Studio существует удобный механизм. С помощью команды Debug Checked Tests в окне Test Results можно заново выполнить все ошибочные тесты, уже в режиме отладки.

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

IntelliTrace

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

Для включения этой функции в меню Debug, нужно выбрать Options and Settings, IntelliTrace. В настройках можно менять параметры записываемой информации.

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

Во время ручного тестирования, тестировщик может сделать то же самое одним нажатием клавиши. IntelliTrace позволяет видеть не только состояние системы на момент ошибки, но и состояния, предшествующие ошибке.

Метки: , ,

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Партнеры DevOpsHub и DevOpsWiki