سؤال

لقد قمت بإفراط في تحميل مشغل التحول الأيسر في صفي ويعمل الإخراج بشكل جيد ، لذلك على سبيل المثال عندما يكون لدي خط يقول Cout << obj ؛ سأخرج الحقول المنفصلة بواسطة فاصلة.

 ostream& operator<<(ostream& output, const MyClass& obj)
 {
     output << obj.field1 << ", " << obj.field2;
     return output;
 }

أريد أن أكتب حالة اختبار لهذه العملية ، لكن ليس لدي أي فكرة عن كيفية مقارنة النتيجة التي تم إرجاعها مع النتيجة المتوقعة في CXXTest. جربت ما يلي ، لكنه لم ينجح:

 TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);

هل من المفترض أن أستخدم عملية cxxtest مختلفة أو تغيير آلية تمرير المعلمة في ts_assert_equals؟

لاحظ أنه عندما أخرج الأسطر التالية ، أحصل على نفس النتائج:

 cout << obj;
 cout << "1, 50.0";

ملاحظة: أحصل على مجموعة من أخطاء التحويل البرمجي عندما أحاول تجميع البرنامج لأن TS_ASSERT_EQUALS يفشل.

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

المحلول

حتى لو تم تجميعها ، فأنت تقارن بشكل أساسي cout مع نفسه ...

حاول الكتابة إلى اثنين متميزة std::stringstreamS ، استخراج قيم السلسلة الخاصة بهم ، ومقارنة هذه.

إذا كنت بحاجة أيضًا إلى اختبار أعلام Ostream ، فحدد وظيفة المقارنة والاستخدام TS_ASSERT_RELATION.

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