Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Фреймворки создания моков<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

4,042 views

Published on

This presentation was made for Samara XP Party #2

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

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 />

×