كيف يمكنك وحدة اختبار التعليمات البرمجية التي تتفاعل مع instantiates طرف ثالث COM الكائنات ؟

StackOverflow https://stackoverflow.com/questions/70482

سؤال

واحدة من أكبر القضايا حاليا عقد لي مرة أخرى من الغوص الكامل البخار في اختبار وحدة هل هذا حقا نسبة كبيرة من مدونة أكتب تعتمد بشكل كبير على طرف ثالث كائنات COM من مصادر مختلفة أن تميل أيضا إلى تتفاعل مع بعضها البعض (أنا أكتب الوظائف الإضافية لـ Microsoft Office باستخدام عدة مساعد المكتبات إذا كنت بحاجة إلى معرفة).

أنا أعرف أنني ربما ينبغي استخدام كائنات وهمية ولكن بالضبط كيف سوف أذهب عن ذلك في هذه الحالة ؟ أرى أنه من السهل نسبيا عندما أنا فقط يجب أن تمر مرجع إلى كائن موجود بالفعل ولكن بعض إجراءات مثيل الخارجية كائنات COM أنفسهم ثم تمر أحيانا على بعض الخارجي COM-كائن من بعد المكتبة المختلفة.

ما هو أفضل نهج الممارسة هنا ؟ وينبغي أن لدي اختبار كود تغيير مؤقتا COM تسجيل المعلومات في التسجيل حتى اختبار التعليمات البرمجية سوف مثيل واحد من كائنات وهمية بدلا من ذلك ؟ يجب حقن تعديل نوع المكتبة وحدات ؟ ما النهج الأخرى هناك ؟

سأكون ممتن بصفة خاصة للحصول على أمثلة أو أدوات دلفي ولكن سيكون سعيد مع المزيد من النصائح العامة و مستوى أعلى تفسيرات فقط كذلك.

شكرا

أوليفر

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

المحلول

النهج التقليدي يقول أن رمز العميل الخاص بك يجب استخدام المجمع ، والتي هي المسؤولة عن إنشاء كائن COM.هذا المجمع ثم يمكن بسهولة سخر.

لأن كنت قد حصلت على أجزاء من التعليمات البرمجية الخاصة بك إنشاء كائنات COM مباشرة, هذا لا يصلح.إذا كان يمكنك تغيير هذا الرمز, هل يمكن استخدام نمط مصنع:استخدام مصنع إنشاء كائن COM.يمكنك أن تسخر من مصنع العودة البديلة الكائنات.

ما إذا كان الكائن هو الوصول إليها عبر المجمع أو عن طريق الأصلي واجهة COM متروك لكم.إذا اخترت أن يسخر واجهة COM, تذكر أن الصك IUnknown::QueryInterface في الخاص بك وهمية, حتى تعرف أن كنت قد سخر جميع الواجهات ، خاصة إذا كان الكائن ثم تمريرها إلى كائن COM.

بدلا من ذلك, تحقق من CoTreateAsClass الأسلوب.انا لم استخدم لكنها قد تفعل ما تحتاجه.

نصائح أخرى

أنه يأتي إلى أسفل إلى 'تصميم الاختبار'.من الناحية المثالية, يجب أن لا مثيل تلك كائنات COM مباشرة ولكن يجب الوصول إليها من خلال طبقة من المراوغة التي يمكن استبدالها بواسطة كائن وهمي.

الآن COM نفسها لا توفر مستوى المراوغة و هل يمكن تقديم نموذج كائن أن تقدم بديلا حقيقيا ولكن أظن أنه سيكون الألم لإنشاء و أنا أشك إذا كنت تريد الحصول على الكثير من المساعدة من القائمة ساخرا الإطار.

أود أن أكتب رقيقة المجمع الدرجة حول الطرف الثالث COM الكائن الذي لديه القدرة على تحميل كائن وهمي بدلا من الفعلي كائن COM في وحدة اختبار الحالة.أنا أفعل هذا عادة من خلال وجود الثاني منشئ أن أسميه يمر في كائن وهمي.العادي منشئ سيكون فقط تحميل كائن COM كالمعتاد.

ويكيبيديا المادة مقدمة جيدة عن الموضوع ويكيبيديا artible

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