GMock은 컴파일되지 않습니다. gtest_exclusive_lock_required가 정의되지 않은 것 같습니다.
-
23-12-2019 - |
문제
간단한 조롱 된 클래스를 만들려고합니다
#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/.