我正在尝试构建一个简单的模拟类

#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() { };
};

使用谷歌模拟。当我尝试编译使用此模拟的测试时,出现以下错误:

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

导致同样的错误。

我已经安装了GMock sudo apt-get install google-mock, ,这给了我一个文件夹 /usr/src 我可以跑到哪里 cmake . 其次是 make 生成我复制到的库文件 /usr/lib. 。头文件已经在 /usr/include 所以我没有手动对它们做任何事情。

有帮助吗?

解决方案

当我尝试使用 gmock 1.7 和 gtest 1.6 进行编译时,出现了同样的错误。确保您使用相同版本的 gtest。

其他提示

我不知道如何使用 g-mock gcc。但基本上我们在windows中使用都是这样的。你的类定义是正确的。你使用过这些功能吗?

EXPECT_CALL(classobj, exact functionname as it looks in definition).AtLeast(Times(0)).Return(0);

然后

classobj.exact functionname as it looks in definition()

试试这个我认为它应该有效。如果您想要详细信息,请告诉我,我将通过一些典型示例进行扩展。

/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/
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top