SlideShare a Scribd company logo
1 of 19
Фреймворки создания моков Практика использования Mockitoи PowerMock
Agenda Модульные тесты Моки Что умеет Mockito Примеры PowerMock – ещё один фреймворк
Модульные тесты Быстрые ещё раз – БЫСТРЫЕ Простые Независимые
Моки Не нужно создавать заглушки, тестовые реализации Не нужно создавать фабрики, инкапсулирующие логику создания нужного экземпляра Тесты легче сделать независимыми Неявно провоцируется хороший стиль программирования
Что умеет Mockito Создавать моки Определять значение, возвращаетмое методом мока Выбрасывать исключение при вызове метода мока Проверять: порядок вызовов количество вызовов отсутствие вызовов
Примеры. Создание мока importstaticorg.mockito.Mockito.*;  IDataProvider provider = mock(IDataProvider.class);
Примеры. Моки из классов File file = mock(File.class); List list = mock(List.class); Нельзя создавать мокиfinal-классов, перекрывать final-методы
Примеры. Задание результата Используйте метод when() совместно со следующими методами: thenAnswer() thenReturn() thenThrow() Если возвращаемый объект не задать, то по умолчанию будут возвращаться null, 0, false.
Примеры. Возврат объекта Возвращаем примитив: MyObjobj = mock(MyObj.class); when(obj.a(“”)).thenReturn(true); Возвращаем экземпляр: MyObjobj = mock(MyObj.class); when(obj.b(0)).thenReturn(new B());
Примеры. Возврат исключения MyObjobj = mock(MyObj.class); when(obj.b(0)) .thenThrow(new Exception());
Примеры. Параметры методов При параметризированных методах необходимо задать значение параметра для возвращаемого значения MyObjobj = mock(MyObj.class); when(obj.c("foo","foo")) .thenReturn(true);
Примеры. Матчеры Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры: when(obj.c(anyString(),     				   anyString())) .thenReturn(true);
Примеры. Проверка вызова Используйте метод verify(): verify(obj).c(“”, “”); verify(obj, times(1)).c(“”, “”); verify(obj, atLeast(2)).c(“”, “”); verify(obj, atMost(2)).c(“”, “”); verify(obj, never()).c(“”, “”);
PowerMock Расширение MockitoиEasyMock Позволяет создавать моки на: static-методы private-методы final-методы Позволяет создавать spy-моки (т.н. partial mocking)
PowerMock А нужно ли это всё?
PowerMock. Назначение Тестирование сторонних библиотек, к которым нет доступа на уровне исходников Быстрое тестирование собственного плохого кода без проведения длительного рефакторинга
PowerMock. Использование Добавляем перед тестом аннотацию: @RunWith(PowerMockRunner.class) @PrepareForTest({ClassToBeMocked.class}) Либо используем JUnitRule (Junit 4.7+): @PrepareForTest(X.class); public class MyTest {    @Rule  PowerMockRule rule = newPowerMockRule();        // Tests goes here   }
PowerMockи Mockito Используется специальная сборка В коде используется класс PowerMockito: PowerMockito.mockStatic(MyOb.class); ... PowerMockito 			 .verifyStatic(MyOb.class); MyOb.aStaticFunc(Mockito.anyInt());
Вопросы? Спасибо за внимание!

More Related Content

What's hot

Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеElias Fofanov
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewAnton Katkov
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4Radik Fattakhov
 
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Elias Fofanov
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest
 

What's hot (6)

Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
 
XP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overviewXP.Party (iOS) - unit tests frameworks overview
XP.Party (iOS) - unit tests frameworks overview
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4
 
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
 
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехникиCodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники
 

Similar to Java mocking frameworks: Mockito and PowerMock

Использование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETИспользование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETPavel Treshnikov
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва it-people
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...Александр Шамрай
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisIosif Itkin
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?Mikalai Alimenkou
 
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения Iosif Itkin
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаZestranec
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика SQALab
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with SeleniumSergey Shvets
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
weFramework 1.0 (с) wexpert.ru
weFramework 1.0 (с) wexpert.ruweFramework 1.0 (с) wexpert.ru
weFramework 1.0 (с) wexpert.ruHipot Studio
 
Тестирование программно-реализованных логических контроллеров типа SoftPLC
Тестирование программно-реализованных логических контроллеров типа SoftPLCТестирование программно-реализованных логических контроллеров типа SoftPLC
Тестирование программно-реализованных логических контроллеров типа SoftPLCNikita Shapovalov
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Mail.ru Group
 
Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...SQALab
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETAlexander Byndyu
 

Similar to Java mocking frameworks: Mockito and PowerMock (20)

Использование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NETИспользование Mock-объектов в TDD на платформе .NET
Использование Mock-объектов в TDD на платформе .NET
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...
Модульное тестирование с помощью visual studio 2012 MS Test, Nunit, X-unit.ne...
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program Analysis
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?
 
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
weFramework 1.0 (с) wexpert.ru
weFramework 1.0 (с) wexpert.ruweFramework 1.0 (с) wexpert.ru
weFramework 1.0 (с) wexpert.ru
 
Тестирование программно-реализованных логических контроллеров типа SoftPLC
Тестирование программно-реализованных логических контроллеров типа SoftPLCТестирование программно-реализованных логических контроллеров типа SoftPLC
Тестирование программно-реализованных логических контроллеров типа SoftPLC
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
 
Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...Система управления автоматическими тестами на примере использования Visual St...
Система управления автоматическими тестами на примере использования Visual St...
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 

Java mocking frameworks: Mockito and PowerMock

  • 1. Фреймворки создания моков Практика использования Mockitoи PowerMock
  • 2. Agenda Модульные тесты Моки Что умеет Mockito Примеры PowerMock – ещё один фреймворк
  • 3. Модульные тесты Быстрые ещё раз – БЫСТРЫЕ Простые Независимые
  • 4. Моки Не нужно создавать заглушки, тестовые реализации Не нужно создавать фабрики, инкапсулирующие логику создания нужного экземпляра Тесты легче сделать независимыми Неявно провоцируется хороший стиль программирования
  • 5. Что умеет Mockito Создавать моки Определять значение, возвращаетмое методом мока Выбрасывать исключение при вызове метода мока Проверять: порядок вызовов количество вызовов отсутствие вызовов
  • 6. Примеры. Создание мока importstaticorg.mockito.Mockito.*; IDataProvider provider = mock(IDataProvider.class);
  • 7. Примеры. Моки из классов File file = mock(File.class); List list = mock(List.class); Нельзя создавать мокиfinal-классов, перекрывать final-методы
  • 8. Примеры. Задание результата Используйте метод when() совместно со следующими методами: thenAnswer() thenReturn() thenThrow() Если возвращаемый объект не задать, то по умолчанию будут возвращаться null, 0, false.
  • 9. Примеры. Возврат объекта Возвращаем примитив: MyObjobj = mock(MyObj.class); when(obj.a(“”)).thenReturn(true); Возвращаем экземпляр: MyObjobj = mock(MyObj.class); when(obj.b(0)).thenReturn(new B());
  • 10. Примеры. Возврат исключения MyObjobj = mock(MyObj.class); when(obj.b(0)) .thenThrow(new Exception());
  • 11. Примеры. Параметры методов При параметризированных методах необходимо задать значение параметра для возвращаемого значения MyObjobj = mock(MyObj.class); when(obj.c("foo","foo")) .thenReturn(true);
  • 12. Примеры. Матчеры Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры: when(obj.c(anyString(), anyString())) .thenReturn(true);
  • 13. Примеры. Проверка вызова Используйте метод verify(): verify(obj).c(“”, “”); verify(obj, times(1)).c(“”, “”); verify(obj, atLeast(2)).c(“”, “”); verify(obj, atMost(2)).c(“”, “”); verify(obj, never()).c(“”, “”);
  • 14. PowerMock Расширение MockitoиEasyMock Позволяет создавать моки на: static-методы private-методы final-методы Позволяет создавать spy-моки (т.н. partial mocking)
  • 15. PowerMock А нужно ли это всё?
  • 16. PowerMock. Назначение Тестирование сторонних библиотек, к которым нет доступа на уровне исходников Быстрое тестирование собственного плохого кода без проведения длительного рефакторинга
  • 17. PowerMock. Использование Добавляем перед тестом аннотацию: @RunWith(PowerMockRunner.class) @PrepareForTest({ClassToBeMocked.class}) Либо используем JUnitRule (Junit 4.7+): @PrepareForTest(X.class); public class MyTest { @Rule  PowerMockRule rule = newPowerMockRule();        // Tests goes here   }
  • 18. PowerMockи Mockito Используется специальная сборка В коде используется класс PowerMockito: PowerMockito.mockStatic(MyOb.class); ... PowerMockito .verifyStatic(MyOb.class); MyOb.aStaticFunc(Mockito.anyInt());