Фреймворки создания моков<br />Практика использования Mockitoи PowerMock<br />
Agenda<br />Модульные тесты<br />Моки<br />Что умеет Mockito<br />Примеры<br />PowerMock – ещё один фреймворк<br />
Модульные тесты<br />Быстрые<br />ещё раз – БЫСТРЫЕ<br />Простые<br />Независимые<br />
Моки<br />Не нужно создавать заглушки, тестовые реализации<br />Не нужно создавать фабрики, инкапсулирующие логику создани...
Что умеет Mockito<br />Создавать моки<br />Определять значение, возвращаетмое методом мока<br />Выбрасывать исключение при...
Примеры. Создание мока<br />importstaticorg.mockito.Mockito.*; <br />IDataProvider provider = mock(IDataProvider.class);<b...
Примеры. Моки из классов<br />File file = mock(File.class);<br />List list = mock(List.class);<br />Нельзя создавать мокиf...
Примеры. Задание результата<br />Используйте метод when() совместно со следующими методами:<br />thenAnswer()<br />thenRet...
Примеры. Возврат объекта<br />Возвращаем примитив:<br />MyObjobj = mock(MyObj.class); when(obj.a(“”)).thenReturn(true);<br...
Примеры. Возврат исключения<br />MyObjobj = mock(MyObj.class);<br />when(obj.b(0))<br />.thenThrow(new Exception());<br />
Примеры. Параметры методов<br />При параметризированных методах необходимо задать значение параметра для возвращаемого зна...
Примеры. Матчеры<br />Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры:<br />when...
Примеры. Проверка вызова<br />Используйте метод verify():<br />verify(obj).c(“”, “”);<br />verify(obj, times(1)).c(“”, “”)...
PowerMock<br />Расширение MockitoиEasyMock<br />Позволяет создавать моки на:<br />static-методы<br />private-методы<br />f...
PowerMock<br />А нужно ли это всё?<br />
PowerMock. Назначение<br />Тестирование сторонних библиотек, к которым нет доступа на уровне исходников<br />Быстрое тести...
PowerMock. Использование<br />Добавляем перед тестом аннотацию:<br />@RunWith(PowerMockRunner.class)<br />@PrepareForTest(...
PowerMockи Mockito<br />Используется специальная сборка<br />В коде используется класс PowerMockito:<br />PowerMockito.moc...
Вопросы?<br />Спасибо за внимание!<br />
Upcoming SlideShare
Loading in …5
×

Java mocking frameworks: Mockito and PowerMock

3,774 views
3,636 views

Published on

This presentation was made for Samara XP Party #2

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,774
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
42
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java mocking frameworks: Mockito and PowerMock

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

×