🗊Использование mock-объектов в модульном тестировании

Категория: Образование
Нажмите для полного просмотра!
Использование mock-объектов в модульном тестировании, слайд №1Использование mock-объектов в модульном тестировании, слайд №2Использование mock-объектов в модульном тестировании, слайд №3Использование mock-объектов в модульном тестировании, слайд №4Использование mock-объектов в модульном тестировании, слайд №5Использование mock-объектов в модульном тестировании, слайд №6Использование mock-объектов в модульном тестировании, слайд №7Использование mock-объектов в модульном тестировании, слайд №8Использование mock-объектов в модульном тестировании, слайд №9Использование mock-объектов в модульном тестировании, слайд №10Использование mock-объектов в модульном тестировании, слайд №11Использование mock-объектов в модульном тестировании, слайд №12Использование mock-объектов в модульном тестировании, слайд №13Использование mock-объектов в модульном тестировании, слайд №14Использование mock-объектов в модульном тестировании, слайд №15Использование mock-объектов в модульном тестировании, слайд №16Использование mock-объектов в модульном тестировании, слайд №17Использование mock-объектов в модульном тестировании, слайд №18Использование mock-объектов в модульном тестировании, слайд №19Использование mock-объектов в модульном тестировании, слайд №20

Вы можете ознакомиться и скачать Использование mock-объектов в модульном тестировании. Презентация содержит 20 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Использование mock-объектов в модульном тестировании
Описание слайда:
Использование mock-объектов в модульном тестировании

Слайд 2





«Без тестов жить нельзя на свете, нет»
Тесты хорошо, а TDD лучше
Результат применения:
Рабочий протестированный код
Способствует хорошему дизайну.
Самодокументация
Описание слайда:
«Без тестов жить нельзя на свете, нет» Тесты хорошо, а TDD лучше Результат применения: Рабочий протестированный код Способствует хорошему дизайну. Самодокументация

Слайд 3





Unit-тесты. Когда невыгодно/неудобно/не получается использовать
Слишком дорого
Невысокая цена ошибки
Надо было сделать вчера
Описание слайда:
Unit-тесты. Когда невыгодно/неудобно/не получается использовать Слишком дорого Невысокая цена ошибки Надо было сделать вчера

Слайд 4





Ситуации, когда сложно использовать юнит-тесты
Нужно протестировать класс, который взаимодействует с
с базой данных
с внешним устройством
с файловой системой
с внешним сервисом
То есть
Если класс взаимодействует с внешней средой, от которой его надо изолировать.
Если класс работает с объектом, методы которого отрабатывают немгновенно.
Особый случай:
Если класс работает с объектом или группой объектов, у которых сложная инициализация.
Описание слайда:
Ситуации, когда сложно использовать юнит-тесты Нужно протестировать класс, который взаимодействует с с базой данных с внешним устройством с файловой системой с внешним сервисом То есть Если класс взаимодействует с внешней средой, от которой его надо изолировать. Если класс работает с объектом, методы которого отрабатывают немгновенно. Особый случай: Если класс работает с объектом или группой объектов, у которых сложная инициализация.

Слайд 5





Выход – использовать поддельные объекты
Пробуем:
Сделаем вид, что мы не знаем про моки
Ура, используем мок-фреймворк
Описание слайда:
Выход – использовать поддельные объекты Пробуем: Сделаем вид, что мы не знаем про моки Ура, используем мок-фреймворк

Слайд 6





Разновидности поддельных объектов (test doubles)
Dummy
Test Stub
Test Spy
Mock object
Fake Object
Описание слайда:
Разновидности поддельных объектов (test doubles) Dummy Test Stub Test Spy Mock object Fake Object

Слайд 7





Behavior vs state verification
Mock-стиль проверки (behavior verification) мы проверям, как происходит взаимодействие объектов.
Классический стиль проверки (state verification)
мы проверяем результаты взаимодействия.
Описание слайда:
Behavior vs state verification Mock-стиль проверки (behavior verification) мы проверям, как происходит взаимодействие объектов. Классический стиль проверки (state verification) мы проверяем результаты взаимодействия.

Слайд 8





Принцип работы и ограничения «классических» mock-объектов
Возможности и ограничения:
Можно мочить классы и интерфейсы.
В классах можно подменять методы и свойства.
Классы не должны быть sealed.
Свойства и методы должны быть виртуальными (public or internal)
Описание слайда:
Принцип работы и ограничения «классических» mock-объектов Возможности и ограничения: Можно мочить классы и интерфейсы. В классах можно подменять методы и свойства. Классы не должны быть sealed. Свойства и методы должны быть виртуальными (public or internal)

Слайд 9





Существующие фреймворки
NMock, Nmock2 (RR)
Rhino Mocks (AAA, RR, …)
Moq (AAA)
Microsoft.Moles
TypeMock
Описание слайда:
Существующие фреймворки NMock, Nmock2 (RR) Rhino Mocks (AAA, RR, …) Moq (AAA) Microsoft.Moles TypeMock

Слайд 10





Record-Replay syntax (RR)
(пример кода на Rhino.Mocks)
Описание слайда:
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 сущности (пример)
Описание слайда:
Возможности 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 и т. д.
Подробнее о возможностях (пример)
Описание слайда:
Microsoft.Moles Не является классической mock-библиотекой. Может переопределять все, что угодно (пример) Можно переопределять члены системных типов Есть только заглушки, моков нет Можно использовать в NUnit и т. д. Подробнее о возможностях (пример)

Слайд 13





Microsoft.Moles: заглушки и моли
Описание слайда:
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>
Описание слайда:
Мы можем указывать, какие типы хотим переопределять <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 — вызовы к незамещенным членам будут обработаны согласно оригинальной реализации их в замещаемом классе
Описание слайда:
Можно управлять поведением Чтобы изменить поведение объекта, делаем так: stub.InstanceBehavior = BehavedBehaviors.DefaultValue; MoleBehaviors.DefaultValue — незамещенные члены класса будут замещены пустым делегатом и возвращать дефолтное значение типа возвращаемого результата MoleBehaviors.NotImplemented — при обращении к незамещенному члену будет возникать исключение NotImplementedException MoleBehaviors.Fallthrough — вызовы к незамещенным членам будут обработаны согласно оригинальной реализации их в замещаемом классе

Слайд 16





Microsoft.Moles: выводы
Мощное средство изоляции
Но как всегда есть недостатки:
Не хватает моков
Накладные расходы на поддержание «теневых» сборок
Некрасивые правила формирования имен
Тормозит рефакторинг
Описание слайда:
Microsoft.Moles: выводы Мощное средство изоляции Но как всегда есть недостатки: Не хватает моков Накладные расходы на поддержание «теневых» сборок Некрасивые правила формирования имен Тормозит рефакторинг

Слайд 17





TypeMock
Платная библиотека для написания тестов в изоляции.
Лишена некоторых недостатков Microsoft.Moles
Осуществляет перехват вызовов на уровне всего приложения
Имеется графический тул
Описание слайда:
TypeMock Платная библиотека для написания тестов в изоляции. Лишена некоторых недостатков Microsoft.Moles Осуществляет перехват вызовов на уровне всего приложения Имеется графический тул

Слайд 18





Промежуточные выводы
Использовать Moles и Typemock не всегда полезно
При построении новой логики лучше пользоваться DIP и другими инструментами
Описание слайда:
Промежуточные выводы Использовать Moles и Typemock не всегда полезно При построении новой логики лучше пользоваться DIP и другими инструментами

Слайд 19





Выводы
Использование моков и заглушек:
расширяет применимость юнит-тестов
позволяют легко тестировать объекты, не имеющие состояния
упрощают setup-методы тестов
позволяют тестировать классы в изоляции
Описание слайда:
Выводы Использование моков и заглушек: расширяет применимость юнит-тестов позволяют легко тестировать объекты, не имеющие состояния упрощают 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
Описание слайда:
Ссылки Проект 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



Похожие презентации
Mypresentation.ru
Загрузить презентацию