Подтвердить что ты не робот

В чем разница между gtest и gmock?

Я пытаюсь понять цель google-mock, фреймворка Google C++.

Я уже работал с gtest ранее, но все еще не могу понять, что такое gmock. Зачем нам это нужно?

gtest используется для модульного тестирования. Для чего нам нужен gmock, если gmock необходим для unit testing?

4b9b3361

Ответ 1

"Google Mock не является самой тестовой средой, а нуждается в тестовой платформе для написания тестов. Google Mock работает без проблем с Google Test. Он поставляется вместе с копией Google Test. Начиная с версии 1.1.0, вы также может использовать его с любой базой тестирования С++ по вашему выбору". - Google Mock, системные требования

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

Ответ 2

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

Gtest - это основа для модульного тестирования. Gmock - это платформа, имитирующая остальную часть вашей системы во время модульных тестов.

Ответ 3

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

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

Вместо этого вы пишете что-то, что удовлетворяет тому же интерфейсу, что и веб-сайт/база данных/датчик/независимо от того, что вы запрограммировали для создания определенных "консервированных" ответов (ошибки, тайм-ауты, несогласованные данные и т.д.). тесты будут работать намного быстрее (потому что они не сталкиваются с накладными расходами реального веб-сайта/базы данных/датчика/независимо), и они предсказуемы. К сожалению, для написания отдельного "макетного" веб-сайта/базы данных/датчика/независимо от каждого сценария, необходимого для тестирования, требуется много кодирования. Чем больше работы, тем меньше вероятность того, что вы это сделаете. Результат: неадекватно протестированный код.

Gmock и его родственники автоматизируют много всего этого, поэтому вы можете указать желаемое "консервированное" поведение в середине самого теста за счет нескольких строк кода. Если тесты просты в написании, вы, скорее всего, напишете о них больше и, следовательно, скорее всего обнаружите ошибки перед отправкой кода: -)

Кстати, это означает, что вам также нужна "инъекция зависимостей": ваш код должен принимать параметр типа интерфейса, и вы должны иметь возможность передавать либо макет объекта (для модульного тестирования), либо "реальный" веб-сайт/база данных/датчик/что угодно (для реального использования).

Ответ 4

Допустим, вы хотите что-то записать в файл.

Вы должны проверить, как системная память заполнена или нет.

Заполните ли вы системную память, чтобы проверить это? Нет.

Ваш друг Google издеваться поможет вам здесь.