Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
20 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
128.34 kB
Просмотров:
95
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд
Содержание слайда: Использование mock-объектов в модульном тестировании
№2 слайд
Содержание слайда: «Без тестов жить нельзя на свете, нет»
Тесты хорошо, а TDD лучше
Результат применения:
Рабочий протестированный код
Способствует хорошему дизайну.
Самодокументация
№3 слайд
Содержание слайда: Unit-тесты. Когда невыгодно/неудобно/не получается использовать
Слишком дорого
Невысокая цена ошибки
Надо было сделать вчера
№4 слайд
Содержание слайда: Ситуации, когда сложно использовать юнит-тесты
Нужно протестировать класс, который взаимодействует с
с базой данных
с внешним устройством
с файловой системой
с внешним сервисом
То есть
Если класс взаимодействует с внешней средой, от которой его надо изолировать.
Если класс работает с объектом, методы которого отрабатывают немгновенно.
Особый случай:
Если класс работает с объектом или группой объектов, у которых сложная инициализация.
№5 слайд
Содержание слайда: Выход – использовать поддельные объекты
Пробуем:
Сделаем вид, что мы не знаем про моки
Ура, используем мок-фреймворк
№6 слайд
Содержание слайда: Разновидности поддельных объектов (test doubles)
Dummy
Test Stub
Test Spy
Mock object
Fake Object
№7 слайд
Содержание слайда: Behavior vs state verification
Mock-стиль проверки (behavior verification) мы проверям, как происходит взаимодействие объектов.
Классический стиль проверки (state verification)
мы проверяем результаты взаимодействия.
№8 слайд
Содержание слайда: Принцип работы и ограничения «классических» mock-объектов
Возможности и ограничения:
Можно мочить классы и интерфейсы.
В классах можно подменять методы и свойства.
Классы не должны быть sealed.
Свойства и методы должны быть виртуальными (public or internal)
№9 слайд
Содержание слайда: Существующие фреймворки
NMock, Nmock2 (RR)
Rhino Mocks (AAA, RR, …)
Moq (AAA)
Microsoft.Moles
TypeMock
№10 слайд
Содержание слайда: Record-Replay syntax (RR)
(пример кода на Rhino.Mocks)
№11 слайд
Содержание слайда: Возможности Moq
Последнее обновление — август 2010. Текущая версия — 4.0.
Не поддерживает Record/Replay.
Минимальная версия .NET – 3.0.
Один простой вариант использования: mock = new Mock<ICommand>();
Параметры: явное указание, любые, диапазон, регулярное выражение (пример)
Генерация исключений (пример)
Ruturns: значение, отложенная инициализация и делегат (пример)
Callback. Позволяют накапливать параметры вызванных методов.
Verification (пример)
Возможность настройки поведения при помощи перечисления MockBehavior (примеры)
Можно задавать ожидания по умолчанию в SetUp и переопределять их в тесте
Перегрузка protected методов (пример)
Как «мочить» internal сущности (пример)
№12 слайд
Содержание слайда: Microsoft.Moles
Не является классической mock-библиотекой.
Может переопределять все, что угодно (пример)
Можно переопределять члены системных типов
Есть только заглушки, моков нет
Можно использовать в NUnit и т. д.
Подробнее о возможностях (пример)
№13 слайд
Содержание слайда: Microsoft.Moles: заглушки и моли
№14 слайд
Содержание слайда: Мы можем указывать, какие типы хотим переопределять
<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
<Assembly Name="mscorelib">
<StubGeneration>
<Types>
<Clear />
<Add Namespace="System!" />
<Add Namespace="Express" />
<Add Namespace="SomeUtils*" />
<Remove TypeName="NotUsedClass" />
</Types>
</StubGeneration>
</Assembly>
</Moles>
<StubGeneration>
<Types>
<Clear />
<Add AbstractClasses="true"/>
</Types>
</StubGeneration>
№15 слайд
Содержание слайда: Можно управлять поведением
Чтобы изменить поведение объекта, делаем так:
stub.InstanceBehavior = BehavedBehaviors.DefaultValue;
MoleBehaviors.DefaultValue — незамещенные члены класса будут замещены пустым делегатом и возвращать дефолтное значение типа возвращаемого результата
MoleBehaviors.NotImplemented — при обращении к незамещенному члену будет возникать исключение NotImplementedException
MoleBehaviors.Fallthrough — вызовы к незамещенным членам будут обработаны согласно оригинальной реализации их в замещаемом классе
№16 слайд
Содержание слайда: Microsoft.Moles: выводы
Мощное средство изоляции
Но как всегда есть недостатки:
Не хватает моков
Накладные расходы на поддержание «теневых» сборок
Некрасивые правила формирования имен
Тормозит рефакторинг
№17 слайд
Содержание слайда: TypeMock
Платная библиотека для написания тестов в изоляции.
Лишена некоторых недостатков Microsoft.Moles
Осуществляет перехват вызовов на уровне всего приложения
Имеется графический тул
№18 слайд
Содержание слайда: Промежуточные выводы
Использовать Moles и Typemock не всегда полезно
При построении новой логики лучше пользоваться DIP и другими инструментами
№19 слайд
Содержание слайда: Выводы
Использование моков и заглушек:
расширяет применимость юнит-тестов
позволяют легко тестировать объекты, не имеющие состояния
упрощают setup-методы тестов
позволяют тестировать классы в изоляции
№20 слайд
Содержание слайда: Ссылки
Проект Moq
http://code.google.com/p/moq/
Проект Rhino Mocks
http://www.ayende.com/projects/rhino-mocks.aspx
Microsoft.Moles
http://research.microsoft.com/en-us/projects/pex/default.aspx
Изолятор TypeMock
http://www.typemock.com/typemock-isolator-product3