Дразнить не виртуальную функцию с помощью Google Mock? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь смоделировать функцию sub, чтобы я мог проверить функцию add. Я использую не виртуальную функцию,

//Non_virtual function
class baseclass {
public:
    int add(int a, int b) {
        return (a + sub(a, b));
    }
    int sub(int c, int d) {
        return (c - d);
    }
};
class mockclass {
public:
    MOCK_METHOD2(sub, int(int a, int b));

};
TEST(sample_test, testmain) {
    mockclass mo;
    int c = 12;
    int d = 4;
    EXPECT_CALL(mo, sub(c, d))
        .WillOnce(testing::Return(8));
    EXPECT_EQ(mo.add(c, d), 20);
}

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

1 Ответ

0 голосов
/ 21 февраля 2020

Возможен способ без виртуального:

struct MySub
{
    int sub(int c, int d) const { return c - d; }
};

template <typename Sub>
class baseclassT : public Sub
{
public:
    int add(int a, int b) {
        return (a + this->sub(a, b));
    }
};

using baseclass = baseclassT<MySub>; // For prod

А затем, для теста:

class MockSub {
public:
    MOCK_METHOD2(sub, int(int a, int b));
};

TEST(sample_test, testmain)
{
    baseclassT<MockSub> mo;
    int c = 12;
    int d = 4;
    EXPECT_CALL(mo, sub(c, d)).WillOnce(testing::Return(8));
    EXPECT_EQ(mo.add(c, d), 20);
}
...