Mock-объект

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая 85.140.215.211 (обсуждение) в 20:08, 4 сентября 2006. Она может серьёзно отличаться от текущей версии.
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Основная проблема при проведении unit-тестов заключается в трудности воспроизведения окружения, необходимого для теста. Предположим, что вы написали тест для класса, который работает с базой данных и должен определенным образом реагировать на неверную версию БД, например, сгенерировать определенное исключение. Воспроизвести такую ситуацию довольно сложно — надо иметь БД, которая содержит определенный номер версии. Для другого теста вполне может понадобиться еще какая-нибудь конфигурация базы данных, и т. д. К тому же, скорость выполнения подобных тестов оставляет желать лучшего, а для TDD (Test Driven Development) это существенно, так как тесты запускаются очень часто. В конечном итоге, сложность создания настоящего окружения для тестов вынудит разработчика отказаться от тестирования.

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

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

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



Отрывок из статьи Mock-объекты с использованием библиотеки cppmock