اختبار وحدة للنشر آمن
-
03-07-2019 - |
سؤال
كيف unittest ضمانة آمنة للنشر في جافا؟
لتكون ملموسة:
ولدي واجهة ذاكرة التخزين المؤقت الذي يحتوي على أسلوب getOrLoad (K مفتاح، تحميل ObjectLoader). الشيء هو، إذا كان مخبأ لا يمكن العثور على كائن للحصول على مفتاح معين، فإنه يجب تحميله من مثيل ObjectLoader. ومع ذلك، يتعين على مخبأ لضمان أن يكون العمل من تحميل كائن من محمل ووضعه في ذاكرة التخزين المؤقت، يشكل نشر آمن.
وأنا الآن في خضم كتابة اختبار أداة JUnit عام لهذه الواجهة ذاكرة التخزين المؤقت وأنا أتساءل كيف سيكون اختبار أن تطبيقات الكاش تلتزم هذه الضمانة نشر آمن.
وأي أفكار؟ رمز الفعلي هو في وحدة لجزء من اختبار systest من كود مستودع في حال كنت تريد لكزة في الملفات الحقيقية.
المحلول 2
وهناك عدد من المنتجين إنشاء كائنات جليل وموضوع غير آمنة مع تنفيذ شفرة التجزئة التي تعتمد على الدولة. وبما أن الكائنات sendt عبر نقطة synchronizatoin المفترض، تتلخص في hashCodes (موضوع محليا). وبالمثل، فإن المستهلكين على الجانب الآخر من البوابة تلخيص hashCodes.
وفي نهاية الاختبار، فإننا نلخص كل النتائج بالنسبة للمنتجين والمستهلكين على التوالي. إذا المبالغ هما على قدم المساواة، ويمر الاختبار.
ويمكننا أيضا استخدام XOR كبديل لتلخيص. في الواقع، فإن أي عملية تبادلي القيام به. فقط نأخذ في الاعتبار أن تسخير اختبار نفسه يجب ألا يعرض أي تزامن إضافية.
نصائح أخرى
وربما يمكنك استخدام مسابقة على الأقل تعطيك المزيد من الثقة الصغيرة التي كود الخاص بك هو الصحيح.
وستحتاج لتنفيذ اثنين من الاختبارات التي يتم تشغيلها عدة مواضيع في وقت واحد. سيخوض ثم زيادة احتمال أن يتم كشف خلل التزامن في الواقع من قبل instrumenting رمز بايت (إضافة تسيطر تجريبيا مشروطة النوم والعائد التعليمات).
والحصول على الواقع خطأ بسبب نشر غير آمنة من الصعب جدا (إذا كان أي شخص يعرف كيف، اسمحوا لي أن أعرف). تحليل ثابت هو أفضل رهان للتوصل إلى حل الآلي. وأود أن التمسك مراجعة التعليمات البرمجية، وليس القلق حول هذا الموضوع أكثر من اللازم.