Что такое mock-объекты в Java?

Мне нравится знать, что mock objects находятся в Java. Почему мы создаем их и каково их использование?

Ответ 1

Объект Mock используется для модульного тестирования. Если у вас есть объект, методы которого вы хотите протестировать, и эти методы зависят от какого-либо другого объекта, вы создаете макет зависимости, а не фактический экземпляр этой зависимости. Это позволяет вам изолировать свой объект.

Общие фреймворки Java для создания макетных объектов включают JMock и EasyMock. Обычно они позволяют создавать макетные объекты, поведение которых вы можете определить, поэтому вы точно знаете, чего ожидать (в отношении возвращаемых значений и побочных эффектов) при вызове методов на макет-объекте.

В качестве примера один общий пример использования может быть в приложении MVC, где у вас есть уровень DAO (объекты доступа к данным) и контроллер, который выполняет бизнес-логику. Если вы хотите, чтобы unit test контроллер, и контроллер имеет зависимость от DAO, вы можете сделать макет DAO, который вернет фиктивные объекты в ваш контроллер.

Важно отметить, что обычно это случай, когда макет объектов реализует тот же интерфейс, что и объекты, которые они издеваются - это позволяет вашему коду справляться с ними через тип интерфейса, как если бы они были экземплярами реальная вещь.

Ответ 2

Mocking и Mock Objects не относятся к Java. Макетные объекты - это единичное тестирование техника, в которой блок кода заменяется фиктивными реализациями, которые эмулируют реальный код. Это помогает записывать единичные тесты с таргетингом на предоставляемые функции по тестируемому классу.

Проверьте эти статьи, которые дают очень хорошее введение в концепцию насмешек:
Mock Objects (PDF)
Эндо-тестирование: модульное тестирование с помощью Mock Objects (PDF)

Если вы ищете фальшивую инфраструктуру для модульного тестирования в Java, взгляните на: Mockito. Я нашел это полезным для своих модульных тестов.

Ответ 3

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

Mockito - очень простая и понятная библиотека Java mock object.

Ответ 4

Цитата отсюда: http://easymock.org/

Единичное тестирование - это тестирование программных блоков в изоляции. Однако, большинство единиц не работают в одиночку, но они сотрудничать с другими подразделениями. Тестировать единица в изоляции, мы должны имитировать сотрудников в контрольная работа. Макет-объект является тестовым замена для соавтора. это настроен для имитации объекта, который он заменяет простым способом.

например, если вы хотите протестировать http-звонки, вам нужно будет создавать объекты запроса в реальном времени, в комплекте со всеми их зависимостями. Это часто может потребовать больших усилий, следовательно, использование издевающихся объектов, которые обеспечивают более быстрый путь к созданию точной версии требуемого объекта без длинной цепи зависимостей.

Ответ 5

Макетные объекты - это те, которые используются при модульном тестировании. который поможет вам протестировать единственную функциональность, которую вы хотите протестировать. потому что все зависимости могут быть достигнуты путем издевательства над этими зависимыми объектами. Поэтому, если тест пройдет, вы будете уверены, что ваш тестируемый прибор верен.

Итак, его автор сценария, который их создает. Вы можете использовать EasyMock как инструмент для Mocking.