Domanda

Sto cercando di costruire una semplice classe derisa

#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));
};

in base alla seguente classe base

class Interp1DBase {
public:
    virtual double evaluateAt(double) const = 0;
    virtual double evaluateAt(double, int) const = 0;
    virtual ~Interp1DBase() { };
};

utilizzando Google Mocks.Quando provo a compilare i test in cui viene utilizzato questo mock, ottengo il seguente errore:

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()
                                         ^

e poi letteralmente centinaia di errori di sintassi o di definizione simili che puntano tutti a file all'interno di GMock.

Ho dato un'occhiata gmock-spec-builder.h:134, e ho trovato quanto segue (in alcuni contesti):

// 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);

il che mi ha portato a crederlo GTEST_EXCLUSIVE_LOCK_REQUIRED_ potrebbe essere una macro che per qualche motivo non è stata definita.E in effetti, dopo aver esaminato tutti i file di intestazione inclusi da entrambi gmock/gmock.h O gtest/gtest.h Non ho ancora trovato la definizione di quella macro.

Cosa sto facendo di sbagliato qui?


AGGIORNAMENTO:

Sono stato in grado di produrre un esempio minimo anche semplice:

// in file mock-test.cpp
#include <gmock/gmock.h>
// Yeah, that's the only content

Compila con

g++ -o mock-test.o -c mock-test.cpp

Causa lo stesso errore.

Ho installato GMock tramite sudo apt-get install google-mock, che mi ha dato una cartella sotto /usr/src dove potevo correre cmake . seguito da make per generare file di libreria in cui ho copiato /usr/lib.I file di intestazione erano già presenti /usr/include quindi non ho fatto nulla al riguardo manualmente.

È stato utile?

Soluzione

Ho riscontrato lo stesso errore quando ho provato a compilare utilizzando gmock 1.7 con gtest 1.6.Assicurati di utilizzare la stessa versione di gtest.

Altri suggerimenti

Non so come usare g-mock gcc.Ma fondamentalmente lo usiamo in finestre come questa.Le tue definizioni di classe sono giuste.Hai usato quelle funzioni come

EXPECT_CALL(classobj, exact functionname as it looks in definition).AtLeast(Times(0)).Return(0);

Poi

classobj.exact functionname as it looks in definition()

Prova questo, penso che dovrebbe funzionare.Se lo vuoi in dettaglio, fammi sapere che espanderò lo stesso con qualche esempio tipico.

Ci sono le fonti e le intestazioni appropriate nella cartella /usr/src/gmock.

Il tuo compito è solo sovrascrivere l'intero contenuto delle cartelle:

/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/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top