Question

J'essaie de créer une classe simple et simulée

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

basé sur la classe de base suivante

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

en utilisant Google Mocks.Lorsque j'essaie de compiler les tests où cette simulation est utilisée, j'obtiens l'erreur suivante :

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

puis littéralement des centaines d'erreurs de syntaxe ou de définition similaires pointant toutes vers des fichiers dans GMock.

j'ai jeté un oeil à gmock-spec-builder.h:134, et j'ai trouvé ce qui suit (dans un certain contexte) :

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

ce qui m'a amené à croire que GTEST_EXCLUSIVE_LOCK_REQUIRED_ il peut s'agir d'une macro qui, pour une raison quelconque, n'a pas été définie.Et en effet, après avoir fouillé tous les fichiers d'en-tête inclus à partir de l'un ou l'autre gmock/gmock.h ou gtest/gtest.h Je n'ai toujours pas trouvé la définition de cette macro.

Qu'est-ce que je fais de mal ici ?


MISE À JOUR:

J'ai pu produire un exemple minimal, même simple :

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

Compiler avec

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

Provoque la même erreur.

J'ai installé GMock via sudo apt-get install google-mock, ce qui m'a donné un dossier sous /usr/src où je pourrais courir cmake . suivi de make pour générer des fichiers de bibliothèque dans lesquels j'ai copié /usr/lib.Les fichiers d'en-tête étaient déjà dans /usr/include donc je n'ai rien fait manuellement à leur sujet.

Était-ce utile?

La solution

J'ai eu la même erreur lorsque j'ai essayé de compiler en utilisant gmock 1.7 avec gtest 1.6.Assurez-vous que vous utilisez la même version de gtest.

Autres conseils

Je ne sais pas comment utiliser g-mock dans gcc.Mais fondamentalement, nous l'utilisons dans des fenêtres comme celle-ci.Vos définitions de classe sont correctes.Avez-vous utilisé ces fonctions comme

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

alors

classobj.exact functionname as it looks in definition()

Essayez ceci, je pense que cela devrait fonctionner.Si vous le souhaitez en détail, faites-le-moi savoir, je développerai la même chose avec un exemple typique.

Il y a les sources et en-têtes appropriés dans le dossier /usr/src/gmock.

Votre travail consiste uniquement à écraser tout le contenu des dossiers :

/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/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top