Передача gMock не выполняется EXPECT_CALL - PullRequest
0 голосов
/ 24 мая 2018

У меня проблема с UpCasting с Gmock

#include "gtest/gtest.h"
#include "gmock/gmock.h"

using namespace testing;
using namespace std;

class MyClass {
public:
    MyClass(int xxx) {}
    int call(int x) {

    };
};

class MockMyClass : public MyClass {
public:
    MockMyClass(int xxx) : MyClass(xxx) {};
    MOCK_METHOD1(call, int(int));
};

TEST(TestMyClass, worksFine) {
    MockMyClass mock(111);

    EXPECT_CALL(mock, call(_))
            .WillOnce(Return(2000)); // times(1) by default;

    mock.call(23);
}

TEST(TestMyClass, doesntWork) {
    MockMyClass mock(111);
    MyClass &myClassNotMock = mock;

    EXPECT_CALL(mock, call(_))
            .WillOnce(Return(2000)); // times(1) by default;

    myClassNotMock.call(23);
}

Я попытался использовать указатели, и похоже, что это та же проблема.Каждый раз, когда у меня есть ссылка на базовый объект (upcasting от mock), и я вызываю функцию, gmock не подхватит его.

Буду признателен за помощь

1 Ответ

0 голосов
/ 25 мая 2018

Хорошо, так что мне удалось выяснить, в чем проблема.Поскольку функция вызова MyClass не является виртуальной, я должен использовать технику шаблонов, описанную в Google Mock CookBook, которая высмеивает не виртуальные методы , или просто вводить интерфейс для MyClass и обычно имитировать его

...