我想要建立一個簡單的嘲笑類GMock不會編譯 - GTEST_EXCLUSIVE_LOCK_REQUIRED似乎
#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
包含的所有頭文件後,我仍未找到該宏的定義。
我在這裏做錯了什麼?
UPDATE:
我已經能夠產生一個更簡單的小例子:
// 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
,所以我沒有手動對它們做任何事情。
原來是這個問題 - 我之前使用過'gtest',然後使用'sudo apt-get install gtest'安裝它,這顯然是在1.6版本中引入的。當我在該項目中加入'gmock'時,它在軟件包回購中不可用,所以我抓住了源代碼1.7版 - 它捆綁了'gtest' 1.7。然而,由於我的搜索路徑('/ usr/include'和'/ usr/lib'下面還有'gtest'頭文件和庫),'gcc'似乎更喜歡從那裏抓取它們,導致這個錯誤。 –