اختبار الوحدة يمر في تصحيح الأخطاء، ولكن معلقة عند تشغيل

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

سؤال

لدي مشكلة غريبة. لدي اختبار وحدة يحتفظ بالتعثر في وضع التشغيل. عندما أقوم بتشغيل نفس الاختبار في تصحيح الأخطاء، بدون نقاط توقف، يمر الاختبار في كل مرة.

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

في مكان ما في رمز الاتصال، أتحقق مما إذا كان هناك استثناء مأخذ توصيل. عندما يحدث هذا، يتم تقديم المستخدم مع بعض الخيارات في مربع حوار، في حين أن رمز الاتصال معلق عبر تلقائي تلقائي، في انتظار قرار.

هو هذا التلقائي الذي يعلق النظام. يجب توفيره بواسطة رمز اختبار الوحدة. لكن سؤالي هو، كيف يأتي هذا يمر في وضع التصحيح؟ هل هناك شيء خاص حول وضع التصحيح الذي يتم فيه تعيين AutoreseteVents تلقائيا بواسطة Visual Studio؟

تحرير

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

هذا هو رمز الاختبار:

giveacodicetagpre.

السبب في أن هذا يضربني، هو أنني في انتظار عودة على رمز Diconnect، قبل استدعاء رمز الاتصال. الجزء الأخير من رمز الفصل يشبه هذا:

giveacodicetagpre.

هل هو لأن المقبس.شوتدا ()، و / أو المقبس.كلوس () طرق تشغيل مؤشرات الترابط؟ وبالتالي، على الرغم من أنني أعود إلى قيمة من رمز قطع الاتصال الخاص بي، إلا أن المقبس لا يتم قطع الاتصال حقا؟

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

المحلول

يبدو وكأنه حالة السباق.يدير رمز التصحيح عادة الكثير من الأشياء الإضافية "تحت غطاء محرك السيارة"، وربما يكون هذا الاختلاف في التوقيت يرمي اختباراتك.

بالطبع دون رؤية التعليمات البرمجية، لا يمكننا حقا مساعدتك كثيرا.

نصائح أخرى

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

ولكن استخدام الأدوات + إرفاق معالج أولا.تصحيح + كسر الكل، تصحيح + Windows + المواضيع والنظر في مداخن مكالمة الخيط.قد تكون قادرا على رؤية سبب السباق أو الجمود.

كان مسألة مماثلة بمجرد مقارنة تواريخ وجهتين، وتوقع تاريخ واحد بعد الآخر، ولكن لأنه أعدم بسرعة، تلقوا نفس الطابع الزمني.

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

السبب في أنني أقول هذا هو، هو ما إذا كان المقبس يقوم في الواقع بفحص 123،251 مرة <100 msecs، ولكن يتم فصل الوقت 123،252ND 101 MSECS.

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

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