GMock لا تجمع - GTEST_EXCLUSIVE_LOCK_REQUIRED يبدو أن لا يكون المعرف
-
23-12-2019 - |
سؤال
أنا أحاول بناء بسيط سخر الدرجة
#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() { };
};
باستخدام جوجل يسخر.عندما أحاول تجميع الاختبارات حيث وهمية تستخدم ، أحصل على الخطأ التالي:
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-وهمية في 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/