Может ли gmock издеваться над неопределенным методом? - PullRequest
1 голос
/ 23 апреля 2019

У меня есть тестовый объект, и я хотел бы вызвать EXPECT_CALL для метода, который не нужен в реальном объекте, возможно ли смоделировать такой неопределенный новый метод?

struct MockObject {
    MOCK_METHOD2(onRecv, void(void* buffer, size_t len));
};

MockObject не наследуется ни от какого другого класса. Это поддерживаемый вариант использования gmock?

1 Ответ

2 голосов
/ 23 апреля 2019

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

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

struct MockObject {
   void onRecv(void* buffer, size_t len) {
        buf_ = buffer;
        len_ = len;
        onRecvCallCount_++;
   }
   void * buf_;
   size_t len_;
   int onRecvCallCount_ = 0;
};

// actual test setup being
void Setup() {
    mockObject.onRecvCallCount_ = 0
}

// The rest of the assertions/expectations get wrapped inside the 
// if (mockObject.onRecvCallCount_) { } block

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

...