使用 Google Mock 模拟非虚函数?

Mocking a non-virtual function using Google Mock?

我正在尝试模拟函数 sub 以便我可以测试函数 add.I 我正在使用非虚函数,

//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);
}

我不知道如何建立加减关系,也不知道我哪里弄错了。 我可以用虚函数来做,但我想用非虚函数来做。 提前致谢

没有虚拟的可能方法:

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);
}