Гавришов Юрий TulaSoft www.sqlaccessories.com Все, в том числе и ложь, служит истине. Франц Кафка TulaDev.NET.

Презентация:



Advertisements
Похожие презентации
LOGO Модульное тестирование. Виды тестов Модульные Тестируется функционал ограниченной части кода (минимум – класса) Тесты изолированы от других частей.
Advertisements

Microsoft TechDays Сергей Попов Независимый разработчик.
Microsoft TechDays Прукс Александр
Microsoft TechDays Сергей Попов Независимый разработчик.
Test Driven Development или как не выстрелить себе в ногу Дмитрий Хрюкин Fuse 8 Online Вторая конференция.NET разработчиков.
SoapUI Содержание лекции Зачем нужен SoapUI? Основные возможности Тестовый проект – Students Использование SoapUI для анализа WSDL Создание заглушек.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»
Объектно-ориентированный подход в языке C#. Класс в языке C# - ссылочный тип, определенный пользователем. Для классов ЯП C# допустимо только единичное.
Не даем роботу падать Тестирование Android приложений Дмитрий Ситников.
SharePoint Conference Украина, Киев 25 апреля 2012 На что способен InfoPath? Управление контентом SharePoint с помощью InfoPath Бельский Сергей.
EPAM Systemswww.epam.com EPAM Systemswww.epam.com Программирование на языке C# Основы ООП.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Инструменты Visual Studio для контроля качества и безопасности кода MSSD-3 Александр Яковлев, Microsoft.
Алексей Баранцев. Управление артефактами в процессе разработки ПО: чему нас учит кибернетика?
Классы в C#. Две роли классов Класс Класс – это модуль, архитектурная единица построения программной системы. Модульность построения – основное свойство.
Mock-объекты mock (англ.) – ложный, фиктивный, мнимый, фальшивый, поддельный.
Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования Александр Межов ОАО ЧЭМК
ДонНУ, кафедра КТ, проф.В.К.Толстых WCF-службы Создание и тестирование.dll-библиотеки WCF-служб Из цикла лекций «Internet-технологии разработки приложений»
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Транксрипт:

Гавришов Юрий TulaSoft Все, в том числе и ложь, служит истине. Франц Кафка TulaDev.NET

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

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

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

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

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

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

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

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

Record-Replay syntax (RR) (пример кода на Rhino.Mocks)

Возможности Moq Последнее обновление август Текущая версия 4.0. Не поддерживает Record/Replay. Минимальная версия.NET – 3.0. Один простой вариант использования: mock = new Mock (); Параметры: явное указание, любые, диапазон, регулярное выражение (пример) Генерация исключений (пример) Ruturns: значение, отложенная инициализация и делегат (пример) Callback. Позволяют накапливать параметры вызванных методов. Verification (пример) Возможность настройки поведения при помощи перечисления MockBehavior (примеры) Можно задавать ожидания по умолчанию в SetUp и переопределять их в тесте Перегрузка protected методов (пример) Как «мочить» internal сущности (пример)

Microsoft.Moles Не является классической mock-библиотекой. Может переопределять все, что угодно (пример) Можно переопределять члены системных типов Есть только заглушки, моков нет Можно использовать в NUnit и т. д. Подробнее о возможностях (пример)

Microsoft.Moles: заглушки и моли FeatureStub typesMole types Detour mechanismVirtual method overriding Runtime instrumentation Static methods, sealed typesNoYes Internal typesYes Private methodsNoYes Static Constructors and Finalizers NoYes PerformanceFastSlower Abstract methodsYesNo

Мы можем указывать, какие типы хотим переопределять

Можно управлять поведением Чтобы изменить поведение объекта, делаем так: stub.InstanceBehavior = BehavedBehaviors.DefaultValue; MoleBehaviors.DefaultValue незамещенные члены класса будут замещены пустым делегатом и возвращать дефолтное значение типа возвращаемого результата MoleBehaviors.NotImplemented при обращении к незамещенному члену будет возникать исключение NotImplementedException MoleBehaviors.Fallthrough вызовы к незамещенным членам будут обработаны согласно оригинальной реализации их в замещаемом классе

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

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

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

Выводы Использование моков и заглушек: расширяет применимость юнит-тестов позволяют легко тестировать объекты, не имеющие состояния упрощают setup-методы тестов позволяют тестировать классы в изоляции

Ссылки Проект Moq Проект Rhino Mocks Microsoft.Moles Изолятор TypeMock