需要Google Mock帮助,

时间:2012-02-09 12:33:14

标签: c++ unit-testing mocking gmock

我有2节课。

class SomeClass
{
public:
    int SomeFunction()
    {
        return 5;
    }
};


class AnotherClass
{
public:
    int AnotherFunction(SomeClass obj)
    {
        return obj.SomeFunction();
    }
};

我为SomeClass做了一个模拟类。

class MockSomeClass : public SomeClass
{
public:
    MOCK_METHOD0(SomeFunction, int());
};

现在我想在单元测试中,当我调用AnotherClass.AnotherFunction时,我得到了我自己选择的结果。 AnotherFunction使用SomeClass.SomeFunction()的函数。我嘲笑了SomeClass。并且我已经设置了当模拟对象的函数调用它时可以调整10.但是当我运行单元测试时它返回5(原始函数)。我该怎么办。以下是我写的单元测试。

[TestMethod]
    void TestMethod1()
    {
        MockSomeClass mock;
        int expected = 10;
        ON_CALL(mock, SomeFunction()).WillByDefault(Return(expected));
        AnotherClass realClass;
        int actual = realClass.AnotherFunction(mock);           
        Assert::AreEqual(expected, actual);
    };

我正在使用visual studio 2008和gmock 1.6.0。我在做什么是错的。在realClass.AnotherFunction上我想要mock.omeFunction()的模拟输出。

1 个答案:

答案 0 :(得分:3)

问题是SomeClass :: SomeFunction(...)不是虚拟的,使它成为虚拟的,它会起作用。

<强>更新

还有一个导致它失败的基本错误,即

的方法签名
int AnotherFunction(SomeClass obj)

创建一个新的SomeClass对象实例,它将导致调用正常的SomeFunction,你应该将对mock的类的引用作为参数传递。

int AnotherFunction(SomeClass* obj)

并使用

调用它
int actual = realClass.AnotherFunction(&mock);