使用Google Mock模拟非虚拟功能吗?

时间:2020-02-21 04:10:41

标签: c++ unit-testing testing googletest googlemock

我正在尝试模拟功能sub,以便可以测试功能添加。我正在使用非虚函数,

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

我不知道如何在add和sub之间建立关系,也不知道我在哪里出错。 我可以用虚拟功能来做,但是我想在非虚拟功能中做。 预先感谢

1 个答案:

答案 0 :(得分:0)

没有虚拟的可能方式:

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