MOCK_METHOD *还不够吗?

时间:2017-11-08 16:03:52

标签: googletest googlemock

受到Google doc" ForDummies"的启发。 :),我正在尝试一个简单的谷歌模拟与谷歌测试示例如下:

    #include <gtest/gtest.h>
    #include <gmock/gmock.h>

    using ::testing::_;

    class A
    {
    public:
        A()
        {
            std::cout << "A()" << std::endl;
        }
        virtual ~A()
        {
            std::cout << "~A()" << std::endl;
        }
        virtual int incVirtual(int i)
        {
            return i + 1;
        }
    };
    class MockA: public A
    {
    public:
        MOCK_METHOD1(incVirtual, int(int));
    };


    TEST(Test, IncTest) {
        MockA a;
        EXPECT_CALL(a, incVirtual(_));
        printf("n == %d\n", a.incVirtual(0));
    }

    int main(int argc, char **argv)
    {
        ::testing::InitGoogleMock(&argc, argv);
        return RUN_ALL_TESTS();
    }

当我运行它时,我得到n == 0

[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from Test
[ RUN      ] Test.IncTest
A()
n == 0
~A()

而我希望它是n == 1。所以我想知道在mock类中定义MOCK_METHODx是不是足以模拟基类方法,还需要做些额外工作才能使MockA::incVirtual调用A::incVirtual

1 个答案:

答案 0 :(得分:0)

这表现得如此。通过模拟你的函数,MockA类基本上用“无所事事”实现覆盖了A类实现。

如果您想在致电A::incVirtual()时致电MockA::incVirtual(),请尝试以下

EXPECT_CALL(a, incVirtual(_)).WillOnce(Invoke(&a, &A::incVirtual));