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.
11. Примеры. Параметры методов При параметризированных методах необходимо задать значение параметра для возвращаемого значения MyObjobj = mock(MyObj.class); when(obj.c("foo","foo")) .thenReturn(true);
12. Примеры. Матчеры Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры: when(obj.c(anyString(), anyString())) .thenReturn(true);
14. PowerMock Расширение MockitoиEasyMock Позволяет создавать моки на: static-методы private-методы final-методы Позволяет создавать spy-моки (т.н. partial mocking)
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());