سؤال

لديّ تطبيق يستفيد بشكل واسع من بنية GraphicsView في QT4 وأرغب في بدء اختبار تلقائي لمكونات واجهة المستخدم ، لكن لا يمكنني العثور على أي موارد تتعلق بـ ماذا او ما يجب أن أختبر أو كيفية اختبار الفصول القائمة على QGraphicsView/QGraphicsWidget؟

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

المحلول

لقد واجهت مشكلات في محاولة لاختبار QGraphicsView. كانت مشكلتي الأكبر

QTest::mousePressEvent(view, Qt::LeftButton, 0);

النتائج في

حدث الماوس "mousepress" غير مقبول من خلال تلقي عنصر واجهة مستخدم

الحصول على مكتوبة إلى وحدة التحكم ، ولم يتم استدعاء معالجات الأحداث الخاصة بي. الحل الذي وجدته هو إرسال الحدث إلى منفذ العرض ، وليس QGraphicsView نفسه:

QTest::mousePressEvent(view->viewport(), Qt::LeftButton, 0);

الذي يرسل الحدث إلى بلدي QGraphicsView الفئة الفرعية كما ينبغي. يجب أن يتيح لك ذلك اختبار عرض الرسومات بالكامل من مستوى عال للتأكد من أن عناصر الرسومات الخاصة بك تتلقى الأحداث بشكل مناسب.

الآن ، على أسئلتك الحقيقية.

فصول رسومات كثيفة بشكل ملاحظ صعب ل اختبار. عند الحصول على بعض النصائح من الصفحات المرتبطة ، أود أن أقترح (1) منفصلة عن المنطق والعرض التقديمي قدر الإمكان ، و (2) لا تختبر على مستوى منخفض للغاية.

يعد فصل المنطق عن العرض التقديمي ممارسات جيدة بشكل عام على أي حال ، ولكن قد يكون من الصعب عندما يتم إنفاق الجزء الأكبر من المنطق في إنشاء العرض التقديمي! في حالة كائنات QGraphicsItem ، ليس لدينا وظائف QTest ملائمة لمحاكاة الأحداث لنا. لذا صمم فصولك للاستجابة للأحداث ذات معنى دلالة باستخدام أنواع يمكن أن تبنيها فعليًا أثناء الاختبارات ، وليس فئات QGraphicsSceneevent ، على سبيل المثال ، الاستخدام

void MyGraphicsItem::pressed(const QPointF &pos, const QPointF &last)

ثم لديك mousePressEvent الطريقة تستخرج المعلومات ذات الصلة من QGraphicsScenemousevent واتصل بنفسك pressed طريقة. ستستخدم اختباراتك طريقتك ، ولن تقلق بشأن إنشاء QGraphicsSceneevents الاصطناعي.

مشكلة ماذا او ما للاختبار أصعب بكثير ، رغم ذلك. على سبيل المثال ، لن ترغب في الحصول على مواضع من عناصر الرسومات في اختباراتك. ماذا يحدث عندما يتغير محرك الرسومات من أسفلك ويتم تقديم عناصرك بشكل مختلف قليلاً؟ بدلاً من ذلك ، يجب أن تركز على اختبارات ذات مغزى دلالة. هل هذان الكائنان يصطدمان؟ هل يتغير لون هذا العنصر عند تحديده؟

الفكرة الأساسية هنا هي تصميم واختبار فصولك على مستوى دلالات التطبيق الخاصة بك ، وليس مستوى QGraphicsView. قد ترغب في عدد صغير من الاختبارات التي تم بناؤها جيدًا والتي تختبر ترجمتك لـ QGraphicsSceneevents إلى أحداث تطبيقك ، ولكنها تفهم أن تلك ستكون أكثر هشاشة من معظم الاختبارات الخاصة بك.

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