سؤال

لقد طرحت هذا السؤال على مجموعة Google ، لكنني أعتقد أنني سأحصل على رد أسرع هنا.

أحاول استخدام إطار السخرية من Google لاختبار الكود الخاص بي. أنا أيضًا أستخدمهم إطار اختبار أيضًا. أنا أجمع في VC9. أواجه مشكلات في مطابقة الحجج التي هي mfc atl cstrings. يقول Gmock إن الكائنات ليست متساوية ويبدو أنها تُقيّم على عناوين المؤشر. الطريقة التي أحاول أن أنسمها منظم مثل ذلك:

void myMethod(const CString & key, const CString & value);

هكذا:

MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);

عند إعداد توقعاتي ، أقوم باتباع المقارنة:

CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));

لقد جربت العديد من المجموعات المختلفة من الممرات مثل:

EXPECT_CALL(myMock, myMethod(StrCaseEq(_T("Some Key")), StrCaseEq(_T
(""Some value)))).WillOnce(Return(true));

EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));


EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));

أنتجت أي من المكالمات المذكورة أعلاه نفس النتيجة. أي شخص آخر يعمل في هذه المسألة؟

هذا هو الإخراج:

جربت Google Mock التوقعتين التاليتين ، لكن لا شيء متطابق:

:80: tried expectation #0
  Expected arg #1: is equal to 006D430C pointing to "Some value"
           Actual: 4-byte object <A8EF 1102>
         Expected: to be called once
           Actual: never called - unsatisfied and active
:83: tried expectation #1
  Expected arg #1: is equal to (ignoring case) ""
           Actual: 4-byte object <A8EF 1102>
  Expected arg #2: is equal to (ignoring case) "Some value"
           Actual: 4-byte object <C0EE 1102>
         Expected: to be called once
           Actual: never called - unsatisfied and active

آدم

هل كانت مفيدة؟

المحلول

نظرًا لأنك لا تقوم بنسخة من الأوتار عندما يتم نقلها إلى طريقتك ، هل تحتاج حقًا إلى التحقق من قيمها؟ يجب أن يكون كافياً لكتابة التوقع التالي:

CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));

... والتي ستتحقق من أن الأوتار الممنوحة لطريقة وهمية هي بالفعل تلك التي تتوقعها (تم التحقق من صحة العنوان) ، وليس نسخة أو سلسلة أخرى.

فيما يتعلق بالسبب في عدم العمل مع المطاعم المطبوعة مع CString, ، أظن أنه إما بسبب CString لا يتغلب operator()== أو أن تطبيقات المطابقة ليس لديها تخصص صريح ل CString.

نصائح أخرى

انتهى الأمر بكونه خطأ مختلف. تنهدات كان في الواقع يصطاد خطأ .... يمكن لـ Google Mocks مقارنة cStrings على ما يرام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top