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.

War es hilfreich?

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/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top