اختبار وحدة Django مع تركيبات التحميل للعديد من مشاكل التطبيقات المعتمدة

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

سؤال

أقوم الآن بإجراء اختبارات الوحدة للرمز الموجود بالفعل. واجهت المشكلة التالية:

بعد تشغيل SyncDB لإنشاء قاعدة بيانات اختبار ، يملأ Django تلقائيًا عدة جداول مثل Django_content_type أو Auth_permissions.

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

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

الطريقة التالية الممكنة هي استخدام خيار Django Dumpdata -Exclude لمملأ بالفعل مع جداول SyncDB. ولكن هذا لا يعمل بشكل جيد أيضًا ، لأنه إذا أخذت كائنات مستخدم ومجموعة المستخدمين من جدول DB وأذونات المستخدم ، تم إنشاؤه تلقائيًا بواسطة SyncDB ، فيمكنني تلقي الأخطاء ، لأن المفاتيح الأساسية ، توصيلها يشير الآن إلى خطأ. هذا أفضل وصف هنا جزئيًا "جحيم لاعبا اساسيا" ، لكن الحل الموضح هناك لا يبدو جيدًا)

المخطط المحتمل التالي الذي أراه هو التالي:

  1. أنا أدير اختباراتي ؛ يقوم Django بإنشاء قاعدة بيانات اختبار ، ويصنع SyncDB ويقوم بإنشاء كل هذه الجداول.
  2. في إعداد الاختبار الخاص بي ، أسقط قاعدة البيانات هذه ، وإنشاء قاعدة بيانات فارغة جديدة.
  3. قم بتحميل تفريغ البيانات من قاعدة البيانات الموجودة أيضًا في إعداد الاختبار
هل كانت مفيدة؟

المحلول

هكذا تم حل المشكلة:

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

لذلك هذا يعمل مثل هذا: SyncDB يملأ contentType وبعض الجداول الأخرى مع البيانات. ثم في إعداد جزء من الاختبارات التي تقوم بتحميل DUMP SQL يقوم بمسح جميع البيانات التي تم إنشاؤها مسبقًا وأحصل على قاعدة بيانات لطيفة.

قد لا يكون الحل الأفضل ، لكنه يعمل =)

نصائح أخرى

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

عند الركض

  $  manage.py test my_proj

تم تثبيت Django مع South مع إنشاء DB Test ، وقم بتشغيل جميع عمليات الترحيل الخاصة بك لمنحك اختبار DB محدث بالكامل.

لكتابة الاختبارات ، قم أولاً بإنشاء وحدة Python Calle ، test_model_factory.py هنا إنشاء وظائف تنشئ كائناتك.

def mk_user():
   User.objects.create(...)

ثم في الاختبارات الخاصة بك ، يمكنك استيراد وحدة test_model_factory ، وإنشاء كائنات لكل اختبار.

  def test_something(self):
     test_user = test_model_factory.mk_user()

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