46
Mockito Mockito * Maddeningly easy to make * Some Mint, Brown Sugar, Lime, Ginger Beer, Ice Image: http://www.friedchillies.com/index.php/recipes/detail/mock-ito/

Саша Баглай. Как работать с Mockito

  • Upload
    -

  • View
    7.523

  • Download
    14

Embed Size (px)

DESCRIPTION

Стало интересно, сел и изучил доку http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html

Citation preview

Page 1: Саша Баглай. Как работать с Mockito

MockitoMockito

* Maddeningly easy to make * Some Mint, Brown Sugar, Lime, Ginger Beer, Ice

Image: http://www.friedchillies.com/index.php/recipes/detail/mock-ito/

Page 2: Саша Баглай. Как работать с Mockito

Дбавляем в проектДбавляем в проект

<dependency>

<groupId>org.mockito</groupId>

<artifactId>mockito-all</artifactId>

<version>1.8.5</version>

</dependency>

* Доставай свой pom.xmlpom.xml * И добавь туда новую зависимость

1.8.51.8.5

Page 3: Саша Баглай. Как работать с Mockito

Исходные классыИсходные классы * Класс BarBar – его и будем тестировать!

1.8.51.8.5

Page 4: Саша Баглай. Как работать с Mockito

Исходные классыИсходные классы * Интерфейс FooFoo – внешняя зависимость

1.8.51.8.5

* Простейшая реализация FooImplFooImpl – так, на всякий

Page 5: Саша Баглай. Как работать с Mockito

Исходные классыИсходные классы * Класс BarVoidBarVoid – для демонстрации void кейсов

1.8.51.8.5

Page 6: Саша Баглай. Как работать с Mockito

Исходные классыИсходные классы * Интерфейс FooVoidFooVoid – внешняя зависимость

1.8.51.8.5

* Реализация FooVoidImplFooVoidImpl – тоже на всякий

Page 7: Саша Баглай. Как работать с Mockito

Исходные классыИсходные классы * Класс Bar2Bar2 – для кейсов с двумя зависимостями

1.8.51.8.5

Page 8: Саша Баглай. Как работать с Mockito

НастраиваемНастраиваем тесттест * Инит мока и инъекция его в класс BarBar – автоматом!

1.8.51.8.5

Page 9: Саша Баглай. Как работать с Mockito

НастраиваемНастраиваем тесттест * Но можно и классически

1.8.51.8.5

Page 10: Саша Баглай. Как работать с Mockito

Совет Совет ##11 * Используй статический импорт

1.8.51.8.5

* MockitoMockito.. перед методами выглядит коряво

Page 11: Саша Баглай. Как работать с Mockito

Был ли вызов метода?Был ли вызов метода? * Создали мок, создали класс с моком, сделали вызов, проверили вызывался ли мок

1.8.51.8.5

Page 12: Саша Баглай. Как работать с Mockito

Игнорим входной параметрИгнорим входной параметр * Мало ли, не интересует нас, что передавали * Главное вызов был!

1.8.51.8.5

Page 13: Саша Баглай. Как работать с Mockito

А как застабить?А как застабить? * То есть заставить мок в ответ на вызов метода вернуть то, что мы хотим

* Что, если передадим не ““qweqwe””? 1.8.51.8.5

Page 14: Саша Баглай. Как работать с Mockito

Осторожно с параметрамиОсторожно с параметрами * Если вызов будет не с тем параметром – сценарий не сработает

* Как быть? 1.8.51.8.5

Page 15: Саша Баглай. Как работать с Mockito

Обобщаем в сценарииОбобщаем в сценарии * Обобщай, если не важно, какой параметр

1.8.51.8.5

Page 16: Саша Баглай. Как работать с Mockito

Проверяем по регуляркеПроверяем по регулярке

1.8.51.8.5

Page 17: Саша Баглай. Как работать с Mockito

Сценарий по регуляркеСценарий по регулярке

1.8.51.8.5

Page 18: Саша Баглай. Как работать с Mockito

Проверки строк поПроверки строк по--прощепроще

1.8.51.8.5 * Все это базируется на матчерах * Те самые org.hamcrest.Matcherorg.hamcrest.Matcher

Page 19: Саша Баглай. Как работать с Mockito

Проверка строк в Проверка строк в verifyverify

1.8.51.8.5 * Те же матчеры можно использовать везде * Как в verifyverify так и в whenwhen

Page 20: Саша Баглай. Как работать с Mockito

Есть и другие Есть и другие any’any’фикаторфикаторыы

1.8.51.8.5 * Это все - тоже матчеры (org.hamcrestorg.hamcrest)

Page 21: Саша Баглай. Как работать с Mockito

Проверка на равенство Проверка на равенство * Везде внутри на объектах иcпользуется equalsequals * Есть специальный матчер eqeq, но его можно упускать

1.8.51.8.5

Page 22: Саша Баглай. Как работать с Mockito

Свой Свой матчерматчер

1.8.51.8.5

* Любителям функционального

Page 23: Саша Баглай. Как работать с Mockito

А как застабить А как застабить voidvoid?? * Обрати внимание, тут мы взяли FooVoidFooVoid, BarVoidBarVoid

1.8.51.8.5 * Бессмысленная операция (наверное для галочки)

Page 24: Саша Баглай. Как работать с Mockito

Exclude Exclude в сценариив сценарии * И все же есть смысл в doNothingdoNothing на voidvoid методе

1.8.51.8.5 * Так мы сделаем условие – все, кроме ““qweqwe””

Page 25: Саша Баглай. Как работать с Mockito

АА если хотим если хотим ExceptionException??

1.8.51.8.5

Page 26: Саша Баглай. Как работать с Mockito

АА если метод если метод voidvoid??

1.8.51.8.5

Page 27: Саша Баглай. Как работать с Mockito

Количество вызововКоличество вызовов

1.8.51.8.5 * Это т.н. VerificationModeVerificationMode

Page 28: Саша Баглай. Как работать с Mockito

ШпионимШпионим

1.8.51.8.5 * Spy работает с реальными объектами

Page 29: Саша Баглай. Как работать с Mockito

В чем же разница? В чем же разница?

1.8.51.8.5

* Мок класса без сценария return’ит nullnull’ы * Spy – вызывает реальные методы * А еще, Spy работает с объектами

Page 30: Саша Баглай. Как работать с Mockito

Что Что return’return’ит ит mockmock? ?

1.8.51.8.5

* Если не указано ничего в сценарии

* Для всех CollectionCollection – пустые коллекции * Для примитивов – их default значения * Все остальные объекты - nullnull

Page 31: Саша Баглай. Как работать с Mockito

Вызов реального методаВызов реального метода

1.8.51.8.5

* Последняя команда повторяется * Не важно thenReturnthenReturn/thenCallRealMethodthenCallRealMethod

Page 32: Саша Баглай. Как работать с Mockito

Вызов реального методаВызов реального метода

1.8.51.8.5

* Для работы с voidvoid методами – другое API

Page 33: Саша Баглай. Как работать с Mockito

Программируем Программируем flowflow

1.8.51.8.5

Page 34: Саша Баглай. Как работать с Mockito

Программируем Программируем flowflow

1.8.51.8.5

* Тут внимание, when2when2 петрет программу whenwhen11

* Просто условие foo.foo(foo.foo(““qweqwe””)) у них одно

Page 35: Саша Баглай. Как работать с Mockito

Сценарии сумируютсяСценарии сумируются

1.8.51.8.5 * Только, если их условия разные * Порядок учтен в пределах одного условия

Page 36: Саша Баглай. Как работать с Mockito

Порядок вызовов у двух моковПорядок вызовов у двух моков

1.8.51.8.5

Page 37: Саша Баглай. Как работать с Mockito

Если стабом не обойтись? Если стабом не обойтись?

1.8.51.8.5

Page 38: Саша Баглай. Как работать с Mockito

thenAnswerthenAnswer для для voidvoid? ?

* Ой, плохо пахнут эти Answer’Answer’ыы

* Аналог doThrowdoThrow с AnswerAnswer механизмом

1.8.51.8.5

Page 39: Саша Баглай. Как работать с Mockito

Мок не трогали? Мок не трогали?

1.8.51.8.5

* Проверяем, что мок не трогали вообще

Page 40: Саша Баглай. Как работать с Mockito

Мок не трогали? Мок не трогали? * Проверяем, что мок больше трогали

1.8.51.8.5

Page 41: Саша Баглай. Как работать с Mockito

Капчим параметрыКапчим параметры

1.8.51.8.5

* Есть возможность записать, что передавалось

Page 42: Саша Баглай. Как работать с Mockito

Reset’Reset’ить ить мокмок??

* ResetReset – плохой запах 1.8.51.8.5

Page 43: Саша Баглай. Как работать с Mockito

Любителям Любителям BDDBDD

1.8.51.8.5 * Импортируйте BDDMockitoBDDMockito вместо MockitoMockito * Там есть аналоги всех методов

Page 44: Саша Баглай. Как работать с Mockito

Диагностика неисправностиДиагностика неисправности

1.8.51.8.5 * Не знаешь в чем дело? * Вызови validateMockitoUssagevalidateMockitoUssage()()

Page 45: Саша Баглай. Как работать с Mockito

Диагностика неисправностиДиагностика неисправности

1.8.51.8.5 * Информативно! * С примерчиками и подсказками

Page 46: Саша Баглай. Как работать с Mockito

Выводы?Выводы?

1.8.51.8.5

* Я перестал юзать потому, что: -- с Mockito я пишу меньше кода -- с Mockito код моих тестов читабельнее -- Mockito проще, но функционально он не уступает -- у Mockito информативнее вывод AssertionErrorAssertionError -- а validateMockitoUssagevalidateMockitoUssage - вообще без комментариев -- у Mockito нет фаз записи/воспроизведения сценария -- а значит ненадо делать replayreplay/replayAllreplayAll -- в Mockito проверки конкретные, а не всего сценария -- в Mockito больше matcher’ов и они reuse’али их -- показалось, обо мне думали разработчики -- а это приятно