我是谷歌模拟的新手,我正在尝试模拟一个接口,但是继续使用未定义的符号来构建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()) 预期:至少被召唤一次 实际:从未调用 - 不满意和活跃
答案 0 :(得分:1)
您必须提供MyClassMock::MyClassMock(int, int, int)
和MyClassMock::~MyClassMock()
的实施。
一方面,当你""
自己的标题时,你应该使用<>
而不是#include
。例如。 #include "IMyInterface.h"
不是#include <IMyInterface.h>
。这样,编译器将在系统包含路径之前搜索当前目录。