هل اختبارات الوحدة على قاعدة بيانات "Live" في الإعدادات.

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

سؤال

إذا كان لديك إعداد قاعدة بيانات في Django ، فكيف يمكنك الحصول على اختبار قاعدة بيانات "Live" (وفقًا لإعدادات Database_* settings.py) بدلاً من تشغيلها على قاعدة بيانات الاختبار سريعة الزوال.

على سبيل المثال ، أود إجراء الاختبار التالي على live قاعدة البيانات المحددة في settings.py:

import unittest

from example import models

class DBDriverTest(unittest.TestCase): 
    db testDriver(self):
       "Connect to the live database and drop in sample value."
       m = models.MyModel('hello')
       m.save() # ... save to the live database from settings.py

في الوقت الحاضر ، سيتم حفظ الكود أعلاه فقط في قاعدة بيانات الاختبار التي تم إنشاؤها. هذا محدود للغاية لأن طلبي يحتوي على عمليات متوازية متعددة تعمل على قاعدة البيانات - وستكون اختبارات وحدتي غير مكتملة (وغير متماسكة) دون القدرة على ضخ الأمور إلى قاعدة بيانات "حية" ومعرفة أين تقف بعد نوم قصير.

الخياران المحتملين اللذين يمكنني التفكير فيهما هما:

  1. قم بتوصيل واجهة برمجة تطبيقات Django لمعرفة كيفية الاتصال "يدويًا" بقاعدة البيانات في الإعدادات.

  2. قم بإجراء اتصال منخفض على مستوى قاعدة بيانات "Live" وملءها يدويًا

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

أنا ممتن لأفكارك ومدخلاتك.

براين

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

المحلول

سيكون عليك تحديد خاصتك test_runner tearDown الطرق ، لأنه يتم إجراء كل اختبار في عزلة ويتم مسح قاعدة البيانات بعد كل تشغيل. يمكنك أن تفعل ، ما تطلبه من خلال بناء فقط test_runner, ، لقد فعلنا ذلك مرة واحدة (على الرغم من أنه لم أكن أنا في الفريق) مع قاعدة بيانات تم الوصول إليها بواسطة خدمات الويب ، ولم يكن لدينا أي طريقة لحذف أي شيء من هناك ولكن لحذف قاعدة البيانات بأكملها يدويًا ؛- ) كان هذا ممتعا جدا.

الإجابة على سؤالك: أنشئك test_runner والاستعداد لإنشاء خاصتك tearDown الطرق ، التي ستحذف فيها فقط الكائنات ، التي قمت بإنشائها. يجب عليك تخزين هناك بطريقة أو بأخرى primary keys, ، لذلك لن تحذف أي شيء من قاعدة البيانات الحية.

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

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