Я читал (и экспериментировал) с несколькими Java mocking API, такими как Mockito, EasyMock, JMock и PowerMock. Каждый из них мне нравится по разным причинам, но в конечном итоге остановился на Mockito. Пожалуйста, обратите внимание на , что это не вопрос о том, какой фреймворк использовать - вопрос действительно относится к любому фреймворку mocking, хотя решение будет выглядеть иначе, как API (очевидно) разные.
Как и многое другое, вы читаете руководства, следуете примерам и возитесь с несколькими примерами кода в проекте песочницы. Но потом, когда приходит время действительно использовать эту штуку, вы начинаете задыхаться - и вот где я.
Мне очень , очень нравится идея издевательства. И да, я знаю о жалобах на насмешки, приводящие к «хрупким» тестам, которые слишком сильно связаны с тестируемыми классами. Но пока я сам не приду к такому осознанию, я действительно хочу дать издевательству шанс увидеть, может ли он добавить какую-то пользу моим модульным тестам.
Сейчас я пытаюсь активно использовать mocks в своих модульных тестах. Mockito допускает как заглушку, так и насмешку. Допустим, у нас есть объект Car
, у которого есть метод getMaxSpeed ()
.В Mockito мы могли бы заглушить его так:
Car mockCar = mock(Car.class);
when(mockCar.getMaxSpeed()).thenReturn(100.0);
Это «заглушает» объект Car
, чтобы он всегда возвращал 100,0
в качестве максимальной скорости нашей машины.
Моя проблема в том, что после написания уже нескольких модульных тестов ... все, что я делаю, - это заглушка моих соавторов! Я не использую ни одного доступного мне метода имитации ( verify
и т. Д.)!
Я понимаю, что застрял в « заглушающем состоянии ума » и нахожу, что сломать его невозможно. Все это чтение, и весь этот ажиотаж, связанный с использованием моков в моем модульном тестировании, и ... Я не могу придумать ни одного варианта использования для проверки поведения.
Так что я сделал резервную копию и перечитал статью Фаулера и другую литературу в стиле BDD, и все же я просто «не понимаю» ценности проверки поведения для двойных соавторов тестирования.
Я знаю , что я что-то упускаю, я просто не знаю, что именно. Может ли кто-нибудь дать мне конкретный пример (или даже набор примеров!) С использованием, скажем, этого класса Car
, и продемонстрировать, когда модульный тест, проверяющий поведение, подходит для проверки состояния?
Заранее благодарим за любые толчки в правильном направлении!