В C ++, как получить EXPECT_CALL () для функции, вызываемой функцией stati c - PullRequest
0 голосов
/ 13 апреля 2020

Я новичок в gmock и иногда мне приходится писать модульные тесты gmock.

У меня есть функция с именем join_server () в классе скажем ClassServer и существует соответствующий класс MOCK для ClassServer. Также у меня есть функция stati c с именем create_service (ClassServer & RefToClassServer), определенная внутри другого класса, скажем ClassService. Stati c функция create_service () вызывает join_server () с использованием ссылки на ClassServer.

Я пытаюсь написать тест gmock, чтобы утверждать, что join_server () вызывается всякий раз, когда вызывается create_service (). Но я получаю ошибку ниже.

Ожидается: будет вызван один раз Фактически: никогда не вызывается - неудовлетворительно и активно

Мой тест на gmock выглядит примерно так

BOOST_AUTO_TEST_CASE(test_create_service)
{   
        EXPECT_CALL(referenceToClassService, join_server());
        create_service(referenceToClassService);
}

Это проверка функции вызывается через stati c функция не поддерживается в gmock? Любая идея, как мне утверждать, что join_server () вызывается всякий раз, когда выполняется create_service ()?

В join_server () я печатаю сообщение, и я подтвердил, что join_server () вызывается всякий раз, когда вызывается create_service ().

Я могу предоставить весь код, но сначала я хочу проверить, поддерживается ли он или нет.

Примечание: join_server () также вызывается функцией-членом другого класса (скажем, DummyClass). Эта функция-член не является stati c, и в этом случае моя проверка EXPECT_CALL (referenceToDummyClass, join_server ()) завершается успешно, как и ожидалось.

Я не понимаю, почему происходит сбой при вызове функции stati c. Спасибо

1 Ответ

0 голосов
/ 22 апреля 2020

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

  • Код теста -use-> SUT -use-> DO C

и, если речь идет о вашем коде, это может быть

  • Тестовый код -use-> refereceToClassService -use-> referenceToClassServer

Вы должны установить ожидания для DO C (referenceToClassServer) и передать его в SUT (referenceToClassService)

Если, наконец, referenceToClassService будет использовать mocked referenceToClassServer

Я вижу, вы устанавливаете ожидания на referenceToClassService, поэтому его следует изменить на referenceToClassServer, потому что refereceToClassService не является фиктивным объектом

  • до: EXPECT_CALL(referenceToClassService, join_server());
  • после: EXPECT_CALL(referenceToClassServer, join_server());

better было бы лучше, если бы кода было достаточно, чтобы хорошо понять вашу ситуацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...