Pergunta

Eu estou tentando construir um simples zombaram de classe

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

com base na seguinte da base de dados de classe

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

usando o Google Zomba.Quando eu tento compilar os testes onde esta simulação é utilizada, recebo o seguinte erro:

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, em seguida, literalmente, centenas de sintaxe similar ou erros de definição de todos apontando para arquivos dentro GMock.

Dei uma olhada no gmock-spec-builder.h:134, e encontrei a seguinte (em algum 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);

o que me levou a acreditar que GTEST_EXCLUSIVE_LOCK_REQUIRED_ pode ser uma macro que por algum motivo não foi definido.E, de fato, depois de cavar através de todos os arquivos de cabeçalho incluído a partir de qualquer gmock/gmock.h ou gtest/gtest.h Eu ainda não encontrei a definição de macro.

O que estou fazendo de errado aqui?


ATUALIZAÇÃO:

Eu tenho sido capaz de produzir até mesmo um simples exemplo mínimo:

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

Compilar com

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

Faz com que o mesmo erro.

Eu tenho instalado GMock através de sudo apt-get install google-mock, que me deu uma pasta em /usr/src onde eu poderia correr cmake . seguido por make para gerar arquivos de biblioteca que eu copiados para /usr/lib.Os arquivos de cabeçalho já estavam em /usr/include então eu não fazer nada sobre eles manualmente.

Foi útil?

Solução

Eu tenho o mesmo erro quando eu tentava compilar usando gmock 1.7 com gtest 1.6.Certifique-se de que você está usando a mesma versão do gtest.

Outras dicas

Eu não sei como usar o g-simulação em gcc.Mas, basicamente, usamos o windows como este.As definições de classe são de direito.Que você use as funções como

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

em seguida,

classobj.exact functionname as it looks in definition()

Tente isso eu acho que ele deve funcionar.Se você quiser-lo em detalhes, apenas deixe-me saber que vai expandir o mesmo com algumas exemplo típico.

Existem as fontes apropriadas & cabeçalhos no /usr/src/gmock pasta.

Seu trabalho é só substituir todo o conteúdo das pastas:

/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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top