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