SlideShare a Scribd company logo
Фреймворки создания моковПрактика использования 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

PPTX
Unit тесты java
PDF
Flux + i bem = bem-store
PPTX
Использование Mock объектов в модульном тестировании
PPTX
Тестируем legacy c++
PPTX
ковалев нестандатное нт
PDF
Тестируем тесты с PIT (мутационное тестирование)
PPTX
А вы знаете что тестируют ваши тесты?
Unit тесты java
Flux + i bem = bem-store
Использование Mock объектов в модульном тестировании
Тестируем legacy c++
ковалев нестандатное нт
Тестируем тесты с PIT (мутационное тестирование)
А вы знаете что тестируют ваши тесты?

What's hot (6)

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

Java mocking frameworks: Mockito and PowerMock