SlideShare a Scribd company logo
1 of 11
Test Double
Мотивирующий пример
Решение
Тест ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Заглушка ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Многогранность двойников
State vs Behavior
Test Stub ,[object Object],[object Object],[object Object]
Test Spy ,[object Object],[object Object]
Mock Object ,[object Object],[object Object],[object Object]
Fake Object ,[object Object]

More Related Content

What's hot

Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
itclub_kz
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
модуль 14 введение в generics
модуль 14 введение в genericsмодуль 14 введение в generics
модуль 14 введение в generics
Yevgeniy Gertsen
 

What's hot (13)

Unit testing iOS Applications
Unit testing iOS ApplicationsUnit testing iOS Applications
Unit testing iOS Applications
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Razrabotka testovykh primerov_ts
Razrabotka testovykh primerov_tsRazrabotka testovykh primerov_ts
Razrabotka testovykh primerov_ts
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
 
What’s New in PHP7?
What’s New in PHP7?What’s New in PHP7?
What’s New in PHP7?
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
модуль 14 введение в generics
модуль 14 введение в genericsмодуль 14 введение в generics
модуль 14 введение в generics
 

Viewers also liked (9)

Aik mohabbat aur sahi by hashim nadeem (complete)
Aik mohabbat aur sahi by hashim nadeem (complete)Aik mohabbat aur sahi by hashim nadeem (complete)
Aik mohabbat aur sahi by hashim nadeem (complete)
 
andretta_staffordmay06
andretta_staffordmay06andretta_staffordmay06
andretta_staffordmay06
 
Oslo Conference Feb. 2010
Oslo  Conference Feb. 2010Oslo  Conference Feb. 2010
Oslo Conference Feb. 2010
 
Kwilnov07 andretta
Kwilnov07 andrettaKwilnov07 andretta
Kwilnov07 andretta
 
Man Chalay Ka Sauda
Man Chalay Ka SaudaMan Chalay Ka Sauda
Man Chalay Ka Sauda
 
Web 30 stampanalogy
Web 30 stampanalogyWeb 30 stampanalogy
Web 30 stampanalogy
 
Kiran kiran suraj
Kiran kiran surajKiran kiran suraj
Kiran kiran suraj
 
andretta_lilac05
andretta_lilac05andretta_lilac05
andretta_lilac05
 
Belfast04
Belfast04Belfast04
Belfast04
 

Similar to Mocks and stubs

Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
yaevents
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
Anton Arhipov
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
Technopark
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
LiloSEA
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
Dmytro Mindra
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
Dmytro Mindra
 

Similar to Mocks and stubs (20)

JRebel
JRebelJRebel
JRebel
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурами
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
course js day 2
course js day 2course js day 2
course js day 2
 
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
 
Thread
ThreadThread
Thread
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
 

Editor's Notes

  1. State verification – проверяется состояние системы после вызова , сравнивается с ожидаемым.
  2. Каким образом протестировать класс Sale?
  3. Behavior. Каждый тест описывает не только взаимодействие клиентов с тестируемой системой , но и взаимодействие тестируемой системы с компонентами , от которых она зависит. Это позволяет убедиться , что система ведет себя ожидаемым образом. Практически всегда подразумевает замену вызываемого компонента. Может использоваться всякий раз , когда тестируемая система вызывает методы других объектов или компонентов. Хрупкость тестов(много сведений о реализации SUT ). Повышение стоимости обслуживания тестов. Используйте по назначению.
  4. Вызываемые компоненты могут возвращать значения или генерировать исключения , влияющие на поведение тестируемой системы , но некоторые из таких случаев практически невозможно спровоцировать , либо дорого. Пример – системные часы , недоступность сети , календарь Многие ветви выполнения предназначены для работы с возвращаемыми значениями и обработки возможных исключений. Появляется запах Untested Code. Эффективное тестирование этих ветвей кода – сложная задача , но именно они с большей вероятностью и приводят к катастрофическим отказам. Реальный компонент можно заставить сгенерировать необходимый ввод , но это потребует слишком больших накладных расходов. Test Double – любой объект ил компонент , который устанавливается вместо реального компонента на время работы теста. Вставка зависимости. Либо Dependency Injection либо Dependency Lookup( в legacy системах более удобно ). Классы Singleton приводят к проблемам при написании тестов Создание подкласса SUT – последний шанс. Начинающие разработчики пытаются заменить заглушками фрагменты тестируемой системы. Используются для разрыва зависимости. Проверка Invoice, ему требуется Customer, тому Address, тому City.
  5. Позволяет проверять внутренние аспекты системы , которые снаружи проверить нельзя(например кэш) В отличии от моков не приводит к неудачному завершению теста при первом отклонении от ожидаемого поведения. Логирует все вызовы. На этапе проверки результатов тестовый агент предоставляет информацию о поступивших от тестируемой системы вызовах.
  6. Объект , от которого зависит тестируемая система , заменяется специально созданным для теста объектом , проверяющим правильность своего использования со стороны тестируемой системы. Часто используется , когда невозможно наблюдать побочные эффекты. Ожидаемое поведение описывается до вызова тестируемой системы. Начинающим разработчикам сложнее писать и понимать такие тесты. Одного этого фактора достаточно , чтобы отдавать предпочтения тестам на основе тестовых агентов( Test Spy) В системе должен быть один тест в той конфигурации , при которой она будет работать в промышленной конфигурации. Приводит к хрупким тестам. Спецификация ожидаемого поведения
  7. Инкапсуляция доступа к базе данных. Затем используем хэш таблицу. Частая причина – недоступность настоящего вызываемого компонента , его недостаточное быстродействие или недоступность в тестовой среде.