我正在尝试构建一个简单的模拟类
#include "interpolation.hpp"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
class MockInterp1D : public Interp1DBase {
public:
MOCK_METHOD1(evaluateAt, double(double));
MOCK_METHOD2(evaluateAt, double(double, int));
};
基于以下基类
class Interp1DBase {
public:
virtual double evaluateAt(double) const = 0;
virtual double evaluateAt(double, int) const = 0;
virtual ~Interp1DBase() { };
};
使用Google Mocks。当我尝试编译使用此模拟的测试时,我收到以下错误:
In file included from /usr/include/gmock/gmock-generated-function-mockers.h:43:0,
from /usr/include/gmock/gmock.h:61,
from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/interpolation/interpolation-mocks.hpp:4,
from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/physics/B-field-tests.hpp:6,
from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/physics/B-field-tests.cpp:2:
/usr/include/gmock/gmock-spec-builders.h:134:41: error: expected ‘;’ at end of member declaration
bool VerifyAndClearExpectationsLocked()
^
然后数百个类似的语法或定义错误都指向GMock中的文件。
我看了gmock-spec-builder.h:134
,发现了以下内容(在某些情况下):
// Verifies that all expectations on this mock function have been
// satisfied. Reports one or more Google Test non-fatal failures
// and returns false if not.
bool VerifyAndClearExpectationsLocked()
GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex);
这让我相信GTEST_EXCLUSIVE_LOCK_REQUIRED_
可能是由于某种原因未定义的宏。事实上,在挖掘了gmock/gmock.h
或gtest/gtest.h
中包含的所有头文件后,我仍然没有找到该宏的定义。
我在这里做错了什么?
更新
我已经能够制作一个简单的简单例子:
// in file mock-test.cpp
#include <gmock/gmock.h>
// Yeah, that's the only content
使用
进行编译g++ -o mock-test.o -c mock-test.cpp
导致相同的错误。
我已经通过sudo apt-get install google-mock
安装了GMock,它在/usr/src
下面给了我一个文件夹,我可以运行cmake .
后跟make
来生成我复制到的库文件/usr/lib
。头文件已经在/usr/include
中,所以我没有手动对它们做任何事情。
答案 0 :(得分:6)
当我尝试使用gmock 1.7与gtest 1.6进行编译时,我遇到了同样的错误。确保您使用的是相同版本的gtest。
答案 1 :(得分:0)
我不知道如何在gcc
中使用g-mock。
但基本上我们在这样的窗口中使用。
你的班级定义是对的。
你使用过像
EXPECT_CALL(classobj, exact functionname as it looks in definition).AtLeast(Times(0)).Return(0);
然后
classobj.exact functionname as it looks in definition()
尝试这个我认为它应该有用。如果你想详细说明,请告诉我,我会用一些典型的例子进行扩展。
答案 2 :(得分:0)
有适当的来源和/ usr / src / gmock文件夹中的标题。
您的工作只会覆盖文件夹的全部内容:
/usr/src/gmock/gtest/src -> /usr/src/gtest/src /usr/src/gmock/gtest/cmake -> /usr/src/gtest/cmake /usr/src/gmock/gtest/CMakeLists.txt-> /usr/src/gtest/CMakeLists.txt /usr/src/gmock/gtest/include/gtest -> /usr/include/gtest/