谷歌模拟类似乎没有实现

时间:2018-05-16 21:41:32

标签: c++ interface mocking

我是谷歌模拟的新手,我正在尝试模拟一个接口,但是继续使用未定义的符号来构建x86_64的链接器错误

这是我的简化代码:

我在.h文件中有以下内容:

namespace Mynamespace
{    
    class IMyInterface
    {
    public:
        virtual ~ IMyInterface() {};

        virtual void myFunction() = 0;

    };
}

这是另一个.h文件:

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

namespace testing
{
    class MyClassMock : public IMyInterface
    {
    public:
        ~ MyClassMock();
        MyClassMock(int, int, int);

        MOCK_METHOD0(myFunction, void());
    };
}

这在我的测试用例.cpp文件中:

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

namespace testing
{
    TEST(MyClassMock, myFunction)
    {
        MyClassMock mcm(0,0,0);
    }
}

你知道我做错了什么吗? 非常感谢任何帮助!

欢呼声, 西蒙

编辑:

不幸的是,模拟似乎仍无效。我添加了这样的实现后:

namespace testing
{
    MyClassMock:: MyClassMock(int a, int b, int c)
    {
    }

    MyClassMock::~ MyClassMock()
    {
    }
}
当我这样做

时,不会调用“myFunction”
#include "MyClassMock.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using ::testing::AtLeast;
using namespace testing;

    TEST(MyClassTest, canCallFunction)
    {
        MyClassMock mock(0,0,0);
        EXPECT_CALL(mock, myFunction())
            .Times(AtLeast(1));
    }

返回: EXPECT_CALL(mock,myFunction()) 预期:至少被召唤一次 实际:从未调用 - 不满意和活跃

1 个答案:

答案 0 :(得分:1)

您必须提供MyClassMock::MyClassMock(int, int, int)MyClassMock::~MyClassMock()的实施。

一方面,当你""自己的标题时,你应该使用<>而不是#include。例如。 #include "IMyInterface.h"不是#include <IMyInterface.h>。这样,编译器将在系统包含路径之前搜索当前目录。