كيف يمكنني مقارنة كائنين Ostream في C ++ للمساواة؟
-
29-09-2019 - |
سؤال
لقد قمت بإفراط في تحميل مشغل التحول الأيسر في صفي ويعمل الإخراج بشكل جيد ، لذلك على سبيل المثال عندما يكون لدي خط يقول 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::stringstream
S ، استخراج قيم السلسلة الخاصة بهم ، ومقارنة هذه.
إذا كنت بحاجة أيضًا إلى اختبار أعلام Ostream ، فحدد وظيفة المقارنة والاستخدام TS_ASSERT_RELATION
.