0%
الاختبار مقابل الواقع بدلاً من الاختبار مقابل محاكاة زائفة

مقدمة

لماذا تتحقق قاعدة بيانات في الذاكرة من شيفرة سترفضها بيئة الإنتاج.

10-15 دقيقة

الاختبار مقابل الواقع بدلاً من الاختبار مقابل محاكاة زائفة

مجموعة اختباراتكم خضراء. ثلاثمائة وأربعون اختباراً، وإحدى عشرة ثانية، ولا إخفاق واحد. تنشرون التطبيق، فيفشل أول طلب في بيئة الإنتاج بالخطأ ERROR: column "created_at" is of type timestamp with time zone but expression is of type character varying. لم يُدخل أحد خللاً برمجياً: الشيفرة التي اختُبرت هي نفسها الشيفرة التي نُشرت. ما تغيّر هو قاعدة البيانات. كانت اختباراتكم تتحدث إلى H2 في وضع التوافق مع PostgreSQL، بينما يتحدث الإنتاج إلى PostgreSQL 16. قبلت H2 التحويل الضمني، ورفضته PostgreSQL. مجموعة اختباراتكم لم تكذب بشأن شيفرتكم، بل كذبت بشأن بيئتها.

هذا السيناريو ليس استثنائياً. فـ H2 لا تعرف jsonb، ولا تطبّق قواعد الترتيب نفسها على السلاسل النصية بحسب collation، وتقبل أسماء أعمدة تحجزها PostgreSQL، وتتعامل مع مستويات عزل المعاملات بمرونة لا تتوفر في Oracle أو SQL Server. كل فارق منها صغير، لكنها مجتمعةً تشكّل فئة كاملة من العيوب لا تستطيع مجموعتكم اكتشافها بنيوياً، ولا تحصلون على أي إشارة عنها قبل النشر. المشكلة ليست في H2، بل في الاعتقاد بأن اختباراً ينجح مقابل H2 يقول شيئاً عن PostgreSQL.

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!