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
.

동일한 오류가 발생합니다.

sudo apt-get install google-mock를 실행할 수있는 /usr/src 다음 cmake .를 실행하여 make에 복사 한 라이브러리 파일을 생성 할 수있는 /usr/lib를 통해 Gmock을 설치했습니다. 헤더 파일은 이미 /usr/include에 있으므로 수동으로 아무 것도하지 않았습니다.

도움이 되었습니까?

해결책

GTEST 1.6을 사용하여 GMOCK 1.7을 사용하여 컴파일하려고했을 때 동일한 오류가 발생했습니다.동일한 버전의 게스트를 사용하고 있는지 확인하십시오.

다른 팁

gcc에서 G-Mock을 사용하는 방법을 모르겠습니다. 그러나 기본적으로 우리는 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