GMock がコンパイルされません - GTEST_EXCLUSIVE_LOCK_REQUIRED が定義されていないようです

StackOverflow https://stackoverflow.com//questions/22065098

質問

単純なモッククラスを構築しようとしています

#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 モックを使用します。このモックが使用されているテストをコンパイルしようとすると、次のエラーが発生します。

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 そのため、手動では何もしませんでした。

役に立ちましたか?

解決

GTest 1.6でGMock 1.7を使用してコンパイルしようとしたときに同じエラーが発生しました。同じバージョンのGTESTを使用していることを確認してください。

他のヒント

g-mockの使い方が分かりません gcc。しかし、基本的にはこのようにウィンドウで使用します。クラス定義は正しいです。などの機能を使用しましたか?

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