C ++ Единоличное тестирование: заглушки (не насмешки)?

StackOverflow https://stackoverflow.com/questions/6351406

Вопрос

Просто попадает в модульное тестирование с C ++. Похоже, мне нужно будет написать несколько классов заглушек, когда я продолжаю. Насколько я понимаю, есть разница между макетами и заглушками. По сути, кажется, что насмехается, когда вы тестируете что -то, что произошло на объекте (например, проверка), в то время как заглушки просто облегчают ваш тест. Я предполагаю, что для издевательства я могу использовать Googlemock, но я ничего не вижу в нем для создания заглушек (ala rhinomocks 'generatestub).

Есть ли способ получить автоматически сгенерированные заглушки? Есть ли у Googlemock поддержка заглушек? Или мне придется вручную создавать заглушки для тестирования?

Это было полезно?

Решение

Я думаю, что недостающая часть головоломки заключается в том, что вам не нужно устанавливать ожидания на методе, и вместо этого вы можете просто установить возвращаемое значение по умолчанию.

Издевается

Все обсуждения и примеры в "Google Mock for Dummies"Сфокусируется на настройке ожиданий. Все говорит об использовании некоторого кода, аналогичного следующему:

EXPECT_CALL(turtle, PenDown())
      .Times(AtLeast(1));

Это то, что вы хотите издеваться, но для загрязнения у вас нет никаких ожиданий. Прочитав это вступление, я понятия не имел, как использовать Googlemock для загрязнения.

Заглушки

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

ON_CALL(foo, Sign(_))
      .WillByDefault(Return(-1));

http://code.google.com/p/googlemock/wiki/cookbook#setting_the_default_actions_for_a_mock_method

Похоже, что Googlemock выпустит предупреждение, если вы позвоните методу, который не имеет ожидаемого_колла. Видимо вы можете предотвратить это предупреждение, используя их Никмок конструкция или вы можете просто игнорировать это. Кроме того, вы можете избежать предупреждения, используя вместо этого ожидание (что я не уверен, хорошая идея для заглушек). От Google Mock Faq:

EXPECT_CALL(foo, Bar(_))
    .WillRepeatedly(...);

Я считаю, что это именно то, что я пытался выяснить.

Обновлять

Я могу подтвердить, что это работает. Я написал модульный тест с использованием Google Test вместе с Googlemock и смог загрязнять метод для класса с использованием on_call.

Другие советы

Единственная разница между макетом и заглушкой заключается в том, что макет применяет поведение, а заглушка - нет.

Насколько мне известно, Mocks Google Mock на самом деле по умолчанию на самом деле загрязнения. Они обеспечивают поведение только в том случае, если вы ставите утверждения о различных методах.

Взгляните на это: Увигатель и аналогичное обсуждение здесь.

Этот вопрос Может быть, также полезно/связано.

Что касается Google Mocks - мы используем его в моем текущем проекте для полной автоматизации реализации STUB. Практически вся база кода Actub реализована с использованием Google Mocks.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top