Java mocking frameworks: Mockito and PowerMock

  • 3,135 views
Uploaded on

This presentation was made for Samara XP Party #2 …

This presentation was made for Samara XP Party #2

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,135
On Slideshare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
31
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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());
  • 19. Вопросы?
    Спасибо за внимание!