GMock kompiliert nicht - GTEST_EXCLUSIVE_LOCK_REQUIRED scheint nicht definiert zu sein
-
23-12-2019 - |
Frage
Ich versuche eine einfache verspottete Klasse zu bauen
#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));
};
basierend auf der folgenden Basisklasse
class Interp1DBase {
public:
virtual double evaluateAt(double) const = 0;
virtual double evaluateAt(double, int) const = 0;
virtual ~Interp1DBase() { };
};
verwenden von Google-Mocks.Wenn ich versuche, die Tests zu kompilieren, in denen dieser Mock verwendet wird, wird die folgende Fehlermeldung angezeigt:
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()
^
und dann buchstäblich Hunderte ähnlicher Syntax- oder Definitionsfehler, die alle auf Dateien in GMock verweisen.
Ich habe mir angesehen gmock-spec-builder.h:134
, und fand Folgendes (in irgendeinem Kontext):
// 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);
was mich dazu brachte zu glauben, dass GTEST_EXCLUSIVE_LOCK_REQUIRED_
könnte ein Makro sein, das aus irgendeinem Grund nicht definiert wurde.Und in der Tat, nach dem Durchsuchen aller Header-Dateien, die von beiden enthalten sind gmock/gmock.h
oder gtest/gtest.h
Ich habe die Definition dieses Makros immer noch nicht gefunden.
Was mache ich hier falsch?
UPDATE:
Ich konnte ein sogar einfaches minimales Beispiel erstellen:
// in file mock-test.cpp
#include <gmock/gmock.h>
// Yeah, that's the only content
Kompilieren mit
g++ -o mock-test.o -c mock-test.cpp
Verursacht den gleichen Fehler.
Ich habe GMock über installiert sudo apt-get install google-mock
, was mir einen Ordner unter gab /usr/src
wo ich laufen könnte cmake .
gefolgt von make
um Bibliotheksdateien zu generieren, in die ich kopiert habe /usr/lib
.Die Header-Dateien waren bereits in /usr/include
also habe ich manuell nichts dagegen unternommen.
Lösung
Ich habe den gleichen Fehler erhalten, als ich versuchte, mit gmock 1.7 mit gtest 1.6 zu kompilieren.Stellen Sie sicher, dass Sie dieselbe Version von gtest verwenden.
Andere Tipps
Ich weiß nicht, wie ich g-mock verwenden soll gcc
.Aber im Grunde verwenden wir in Fenstern wie diesem.Ihre Klassendefinitionen sind richtig.Haben Sie diese Funktionen wie verwendet
EXPECT_CALL(classobj, exact functionname as it looks in definition).AtLeast(Times(0)).Return(0);
dann
classobj.exact functionname as it looks in definition()
Versuchen Sie das, ich denke, es sollte funktionieren.Wenn Sie es im Detail wollen, lassen Sie es mich einfach wissen, ich werde das gleiche mit einem typischen Beispiel erweitern.
Im Ordner / usr / src / gmock befinden sich die entsprechenden Quellen und Header.
Ihre Aufgabe ist es nur, den gesamten Inhalt von Ordnern zu überschreiben:
/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/