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.

10

Share

Download to read offline

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

Download to read offline

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

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. Mockito Image: http://www.friedchillies.com/index.php/recipes/detail/mock-ito/* Maddeningly easy to make* Some Mint, Brown Sugar, Lime, Ginger Beer, Ice
  2. 2. Дбавляем в проект* Доставай свой pom.xml* И добавь туда новую зависимость <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.5</version> </dependency> 1.8.5
  3. 3. Исходные классы* Класс Bar – его и будем тестировать! 1.8.5
  4. 4. Исходные классы* Интерфейс Foo – внешняя зависимость* Простейшая реализация FooImpl – так, на всякий 1.8.5
  5. 5. Исходные классы* Класс BarVoid – для демонстрации void кейсов 1.8.5
  6. 6. Исходные классы* Интерфейс FooVoid – внешняя зависимость* Реализация FooVoidImpl – тоже на всякий 1.8.5
  7. 7. Исходные классы* Класс Bar2 – для кейсов с двумя зависимостями 1.8.5
  8. 8. Настраиваем тест* Инит мока и инъекция его в класс Bar – автоматом! 1.8.5
  9. 9. Настраиваем тест* Но можно и классически 1.8.5
  10. 10. Совет #1* Используй статический импорт* Mockito. перед методами выглядит коряво Mockito. 1.8.5
  11. 11. Был ли вызов метода?* Создали мок, создали класс с моком, сделали вызов, проверили вызывался ли мок 1.8.5
  12. 12. Игнорим входной параметр* Мало ли, не интересует нас, что передавали* Главное вызов был! 1.8.5
  13. 13. А как застабить?* То есть заставить мок в ответ на вызов метода вернуть то, что мы хотим 1.8.5* Что, если передадим не “qwe”? qwe”
  14. 14. Осторожно с параметрами* Если вызов будет не с тем параметром – сценарий не сработает 1.8.5* Как быть?
  15. 15. Обобщаем в сценарии* Обобщай, если не важно, какой параметр 1.8.5
  16. 16. Проверяем по регулярке 1.8.5
  17. 17. Сценарий по регулярке 1.8.5
  18. 18. Проверки строк по-проще по-* Все это базируется на матчерах 1.8.5* Те самые org.hamcrest.Matcher
  19. 19. Проверка строк в verify* Те же матчеры можно использовать везде 1.8.5* Как в verify так и в when
  20. 20. Есть и другие any’фикаторы any’фикаторы 1.8.5* Это все - тоже матчеры (org.hamcrest org.hamcrest)
  21. 21. Проверка на равенство* Везде внутри на объектах иcпользуется equals* Есть специальный матчер eq но его можно упускать eq, 1.8.5
  22. 22. Свой матчер 1.8.5* Любителям функционального
  23. 23. А как застабить void? void?* Обрати внимание, тут мы взяли FooVoid BarVoid FooVoid,* Бессмысленная операция (наверное для галочки) 1.8.5
  24. 24. Exclude в сценарии* И все же есть смысл в doNothing на void методе* Так мы сделаем условие – все, кроме “qwe” qwe” 1.8.5
  25. 25. А если хотим Exception? Exception? 1.8.5
  26. 26. А если метод void? void? 1.8.5
  27. 27. Количество вызовов 1.8.5* Это т.н. VerificationMode
  28. 28. Шпионим* Spy работает с реальными объектами 1.8.5
  29. 29. В чем же разница?* Мок класса без сценария return’ит null null’ы* Spy – вызывает реальные методы* А еще, Spy работает с объектами 1.8.5
  30. 30. Что return’ит mock? return’ит mock?* Если не указано ничего в сценарии* Для всех Collection – пустые коллекции* Для примитивов – их default значения* Все остальные объекты - null 1.8.5
  31. 31. Вызов реального метода* Последняя команда повторяется* Не важно thenReturn thenCallRealMethod thenReturn/thenCallRealMethod 1.8.5
  32. 32. Вызов реального метода* Для работы с void методами – другое API 1.8.5
  33. 33. Программируем flow 1.8.5
  34. 34. Программируем flow* Тут внимание, when2 петрет программу when1 when1* Просто условие foo.foo(“qwe”) у них одно foo.foo(“qwe” 1.8.5
  35. 35. Сценарии сумируются* Только, если их условия разные* Порядок учтен в пределах одного условия 1.8.5
  36. 36. Порядок вызовов у двух моков 1.8.5
  37. 37. Если стабом не обойтись? 1.8.5
  38. 38. thenAnswer для void? void?* Аналог doThrow с Answer механизмом 1.8.5* Ой, плохо пахнут эти Answer’ы Answer’ы
  39. 39. Мок не трогали?* Проверяем, что мок не трогали вообще 1.8.5
  40. 40. Мок не трогали?* Проверяем, что мок больше трогали 1.8.5
  41. 41. Капчим параметры* Есть возможность записать, что передавалось 1.8.5
  42. 42. Reset’ить мок? Reset’ить мок? 1.8.5* Reset – плохой запах
  43. 43. Любителям BDD* Импортируйте BDDMockito вместо Mockito 1.8.5* Там есть аналоги всех методов
  44. 44. Диагностика неисправности* Не знаешь в чем дело? 1.8.5* Вызови validateMockitoUssage() validateMockitoUssage()
  45. 45. Диагностика неисправности* Информативно! 1.8.5* С примерчиками и подсказками
  46. 46. Выводы?* Я перестал юзать потому, что:-- с Mockito я пишу меньше кода-- с Mockito код моих тестов читабельнее-- Mockito проще, но функционально он не уступает-- у Mockito информативнее вывод AssertionError-- а validateMockitoUssage - вообще без комментариев-- у Mockito нет фаз записи/воспроизведения сценария-- а значит ненадо делать replay replayAll replay/replayAll-- в Mockito проверки конкретные, а не всего сценария-- в Mockito больше matcher’ов и они reuse’али их-- показалось, обо мне думали разработчики 1.8.5-- а это приятно
  • OlgaYaremchuk

    Nov. 27, 2019
  • nazarparuna1

    Sep. 29, 2017
  • ssusercfa450

    May. 5, 2016
  • sergeyvolkodav7

    Jun. 9, 2015
  • leokom

    Mar. 5, 2015
  • apolonxviii

    Feb. 6, 2015
  • ssuser21571a

    Feb. 3, 2015
  • Van_Cooper

    Jul. 8, 2014
  • johngalt7

    May. 9, 2014
  • andreipushkin1

    Feb. 18, 2013

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

Views

Total views

17,538

On Slideshare

0

From embeds

0

Number of embeds

1,640

Actions

Downloads

181

Shares

0

Comments

0

Likes

10

×