Не так давно, на двухдневном тренинге по TDD я решил поизучать новый mock-framework. Путем гугления выбрал самую популярную. 4 часа я вкуривал доку по Mockito v1.8.5. Читал и писал тесты, чтобы опробовать либу на деле.
В доке все супер понятно написано, но знание, которое не опробовано на практике скоро теряется. Так родился этот проектик с несколькими десятками тестов, проверяющих почти все возможности библиотеки.
Еще пол дня и я могу представить презенташку основанную на этих простых тестах
Пользуйся на здоровье. Надеюсь мой день не прошел даром и ты получишь ответы на вопросы:
- Как работать с Mockito?
- В чем фишка Mockito?
- Что лучше: Mockito или другой mock-framework?
В доке все супер понятно написано, но знание, которое не опробовано на практике скоро теряется. Так родился этот проектик с несколькими десятками тестов, проверяющих почти все возможности библиотеки.
Еще пол дня и я могу представить презенташку основанную на этих простых тестах
Пользуйся на здоровье. Надеюсь мой день не прошел даром и ты получишь ответы на вопросы:
- Как работать с Mockito?
- В чем фишка Mockito?
- Что лучше: Mockito или другой mock-framework?
А для чего в 8 слайде поле bar инициализируется
ОтветитьУдалить= new Bar(null)
если на нём стоит инъекция @InjectMocks. Это как-то для неё?
Просто другого конструктора нет :)
ОтветитьУдалитьСпасибо за вопрос, мне это место самому не понравилось...
Этот комментарий был удален администратором блога.
ОтветитьУдалитьКрутая библиотека ) сегодня перевёл все тесты в моих шахматах https://github.com/lrozenblyum/chess на эти моки ) в результате грохнул кучу своего кода подготовки моков - как их писать знаю, теперь эти велосипеды уже не нужны.
ОтветитьУдалитьЕдинственное место где, как мне показалось, моя реализация была читабельнее - это там, где мне понадобилось застаббить поведение void-метода... Как-то переопределение doAnswer выглядит не очень:
https://github.com/lrozenblyum/chess/commit/4e6b06eb1ccebf07f8d871ab5913f6e2ec28f0fc
А в целом - библиотечка очень приятная
Да, они умнички!
ОтветитьУдалитьСоглсаен. Но тесты не совсем equals. В старой версии при установке лиснера он сразу обрабатывался (еще в конструкторе). А в версии с Mockito это делается во время вызова processInputFromServer в методе run, что, кажется ближе к реальности.
А 72 строки MockCommander? Я считаю это победой, если столько строк удалось убить без потери функциональности.
Вообще doAnswer мне пахнет. Думаю его сделали для того, чтобы была такая возможность вообще, но не часто. Думаю все дело в том, что WinboardPlayer сам интанциирует лиснеры, от которых зависит его поведение. Это наверное не плохо (код глубоко не изучал), но когда в моем коде встречается doAnswer, я на чуточку задумываюсь - "уже сложно, а что дальше?"
Для улучшения читабельности в тесте сделал бы один ExtractMethod вот так http://bit.ly/XfyUWa
Спасибо, Саша за ревью! Да, новый вариант получился ближе к реальности ) И кода грохнул много ))
УдалитьdoAnswer мне тоже пахнет, пока ещё не знаю как это улучшить.
WinboardPlayer создаёт листенеры для интерфейса нижнего уровня WinboardCommander, это для меня первый реальный опыт работы с листенерами в джаве (до этого только джаваскрипт), интересно к чему это приведёт.
Спасибо за Extract Method) узнал о существовании Stubber интерфейса! Мокито крут, тут ещё много вкусненького)
Люблю ревью.
УдалитьСпасибо и тебе.
Кстати скоро буду на родине, могли бы покодить в паре что-то.
А еще хочу tetris dojo провести у вас. Ты как?
"А для чего в 8 слайде поле bar инициализируется
ОтветитьУдалить= new Bar(null)
если на нём стоит инъекция @InjectMocks. Это как-то для неё?"
Там вообще ничего не нужно инициализировать
Хватит просто:
@InjectMocks
private Bar bar;
Вы пробовали? А тоя уже не помню. Помню, что другого конструктора нет, а вот найдет ли мокито его и додумается передать null - не помню. Зачем-то я все же написал это, и помню что оно мне не понравилось...
ОтветитьУдалитьДа, пробовал, работает.
УдалитьСпасибо. Буду знать.
Удалитьв 24 слайде если строку с doNithing закоментить - тест все равно пройдет
ОтветитьУдалить