Pregunta

Estoy intentando crear una clase simulada simple.

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

basado en la siguiente clase base

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

usando simulacros de Google.Cuando intento compilar las pruebas donde se usa este simulacro, aparece el siguiente error:

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

y luego, literalmente, cientos de errores de definición o sintaxis similares, todos apuntando a archivos dentro de GMock.

le eché un vistazo gmock-spec-builder.h:134, y encontré lo siguiente (en algún contexto):

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

lo que me llevó a creer que GTEST_EXCLUSIVE_LOCK_REQUIRED_ Podría ser una macro que por alguna razón no estaba definida.Y de hecho, después de examinar todos los archivos de encabezado incluidos desde cualquiera de los dos gmock/gmock.h o gtest/gtest.h Todavía no he encontrado la definición de esa macro.

¿Qué estoy haciendo mal aquí?


ACTUALIZAR:

He podido producir un ejemplo mínimo incluso simple:

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

Compilar con

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

Provoca el mismo error.

He instalado GMock a través de sudo apt-get install google-mock, que me dio una carpeta debajo /usr/src donde podría correr cmake . seguido por make para generar archivos de biblioteca que copié /usr/lib.Los archivos de encabezado ya estaban en /usr/include así que no hice nada al respecto manualmente.

¿Fue útil?

Solución

Obtuve el mismo error cuando intenté compilar usando GMOCK 1.7 con GTEST 1.6.Asegúrese de que está utilizando la misma versión de GTEST.

Otros consejos

No sé cómo usar G-Mock en gcc. Pero básicamente usamos en Windows como este. Tus definiciones de clase son correctas. Usaste esas funciones como

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

luego

classobj.exact functionname as it looks in definition()

Intenta esto, creo que debería funcionar.Si lo desea en detalle, hágamelo saber, ampliaré lo mismo con un ejemplo típico.

Hay las fuentes y encabezados apropiados en la carpeta / USR / SRC / GMOCK.

Su trabajo solo está sobrescribe todo el contenido de las carpetas:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top