GMock не компилируется — GTEST_EXCLUSIVE_LOCK_REQUIRED, похоже, не определен

StackOverflow https://stackoverflow.com//questions/22065098

Вопрос

Я пытаюсь создать простой имитируемый класс

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

на основе следующего базового класса

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

с помощью Google Mocks.Когда я пытаюсь скомпилировать тесты, в которых используется этот макет, я получаю следующую ошибку:

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

а затем буквально сотни подобных синтаксических ошибок или ошибок определений, указывающих на файлы в GMock.

я взглянул на gmock-spec-builder.h:134, и нашел следующее (в некотором контексте):

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

что заставило меня поверить, что GTEST_EXCLUSIVE_LOCK_REQUIRED_ может быть макросом, который по какой-то причине не был определен.И действительно, после изучения всех заголовочных файлов, включенных в любой из gmock/gmock.h или gtest/gtest.h Я до сих пор не нашел определения этого макроса.

Что я здесь делаю не так?


ОБНОВЛЯТЬ:

Мне удалось создать даже простой минимальный пример:

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

Скомпилировать с

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

Вызывает ту же ошибку.

Я установил GMock через sudo apt-get install google-mock, что дало мне папку под /usr/src где я мог бы бежать cmake . с последующим make для создания файлов библиотеки, которые я скопировал в /usr/lib.Заголовочные файлы уже были в /usr/include поэтому я ничего не делал с ними вручную.

Это было полезно?

Решение

Я получил ту же ошибку, когда попытался скомпилировать gmock 1.7 с gtest 1.6.Убедитесь, что вы используете ту же версию gtest.

Другие советы

Я не знаю, как использовать g-mock в gcc.Но в основном мы используем в таких окнах.Ваши определения классов верны.Использовали ли вы такие функции, как

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

затем

classobj.exact functionname as it looks in definition()

Попробуйте, я думаю, должно сработать.Если вам нужны подробности, просто дайте мне знать, я раскрою это каким-нибудь типичным примером.

Соответствующие источники и заголовки находятся в папке /usr/src/gmock.

Ваша задача — всего лишь перезаписать все содержимое папок:

/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/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top