Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

воскресенье, 27 ноября 2011 г.

Java for fun: Как работать с Mockito?

Не так давно, на двухдневном тренинге по TDD я решил поизучать новый mock-framework. Путем гугления выбрал самую популярную. 4 часа я вкуривал доку по Mockito v1.8.5. Читал и писал тесты, чтобы опробовать либу на деле.

В доке все супер понятно написано, но знание, которое не опробовано на практике скоро теряется. Так родился этот проектик с несколькими десятками тестов, проверяющих почти все возможности библиотеки.

Еще пол дня и я могу представить презенташку основанную на этих простых тестах



Пользуйся на здоровье. Надеюсь мой день не прошел даром и ты получишь ответы на вопросы:
- Как работать с Mockito?
- В чем фишка Mockito?
- Что лучше: Mockito или другой mock-framework?

12 комментариев:

  1. А для чего в 8 слайде поле bar инициализируется
    = new Bar(null)
    если на нём стоит инъекция @InjectMocks. Это как-то для неё?

    ОтветитьУдалить
  2. Просто другого конструктора нет :)
    Спасибо за вопрос, мне это место самому не понравилось...

    ОтветитьУдалить
  3. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  4. Крутая библиотека ) сегодня перевёл все тесты в моих шахматах https://github.com/lrozenblyum/chess на эти моки ) в результате грохнул кучу своего кода подготовки моков - как их писать знаю, теперь эти велосипеды уже не нужны.

    Единственное место где, как мне показалось, моя реализация была читабельнее - это там, где мне понадобилось застаббить поведение void-метода... Как-то переопределение doAnswer выглядит не очень:
    https://github.com/lrozenblyum/chess/commit/4e6b06eb1ccebf07f8d871ab5913f6e2ec28f0fc

    А в целом - библиотечка очень приятная

    ОтветитьУдалить
  5. Да, они умнички!

    Соглсаен. Но тесты не совсем equals. В старой версии при установке лиснера он сразу обрабатывался (еще в конструкторе). А в версии с Mockito это делается во время вызова processInputFromServer в методе run, что, кажется ближе к реальности.

    А 72 строки MockCommander? Я считаю это победой, если столько строк удалось убить без потери функциональности.
    Вообще doAnswer мне пахнет. Думаю его сделали для того, чтобы была такая возможность вообще, но не часто. Думаю все дело в том, что WinboardPlayer сам интанциирует лиснеры, от которых зависит его поведение. Это наверное не плохо (код глубоко не изучал), но когда в моем коде встречается doAnswer, я на чуточку задумываюсь - "уже сложно, а что дальше?"

    Для улучшения читабельности в тесте сделал бы один ExtractMethod вот так http://bit.ly/XfyUWa

    ОтветитьУдалить
    Ответы
    1. Спасибо, Саша за ревью! Да, новый вариант получился ближе к реальности ) И кода грохнул много ))

      doAnswer мне тоже пахнет, пока ещё не знаю как это улучшить.

      WinboardPlayer создаёт листенеры для интерфейса нижнего уровня WinboardCommander, это для меня первый реальный опыт работы с листенерами в джаве (до этого только джаваскрипт), интересно к чему это приведёт.

      Спасибо за Extract Method) узнал о существовании Stubber интерфейса! Мокито крут, тут ещё много вкусненького)

      Удалить
    2. Люблю ревью.
      Спасибо и тебе.
      Кстати скоро буду на родине, могли бы покодить в паре что-то.
      А еще хочу tetris dojo провести у вас. Ты как?

      Удалить
  6. "А для чего в 8 слайде поле bar инициализируется
    = new Bar(null)
    если на нём стоит инъекция @InjectMocks. Это как-то для неё?"

    Там вообще ничего не нужно инициализировать
    Хватит просто:

    @InjectMocks
    private Bar bar;

    ОтветитьУдалить
  7. Вы пробовали? А тоя уже не помню. Помню, что другого конструктора нет, а вот найдет ли мокито его и додумается передать null - не помню. Зачем-то я все же написал это, и помню что оно мне не понравилось...

    ОтветитьУдалить
  8. в 24 слайде если строку с doNithing закоментить - тест все равно пройдет

    ОтветитьУдалить