سؤال

Django 1.4 وثائق على الاختبارات تنص على:

لتطبيق Django معين ، يبحث عداء الاختبار عن الدكتوراه في مكانين:

  • ال models.py ملف. يمكنك تحديد الدكتوراه على مستوى الوحدة و/أو الدكتوراه في النماذج الفردية. من الممارسات الشائعة وضع الدكتوراه على مستوى التطبيق في الوحدة النمطية Docstring و Doctests على مستوى النموذج في المستندات النموذجية.

  • ملف يسمى tests.py في دليل التطبيق - أي الدليل الذي يحمل models.py. هذا الملف عبارة عن خطاف لأي وجميع الدكتوراه التي تريد كتابتها والتي لا تتعلق بالضرورة بالنماذج.

بدافع الفضول أود أن أعرف لماذا يقتصر اختبار Django على الدكتوراه في models.py, ، لكن من الناحية العملية ، أود أن أعرف كيف يمكن للمرء أن يوسعت من أطباق Testrunner لتضمينها (على سبيل المثال) views.py وحدات أخرى عند الجري manage.py test.

سأكون ممتنًا لأي مدخلات.

شكرًا لك.

براين

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

المحلول

يمكنك القيام بذلك عن طريق إضافة/تحرير وظيفة Suite () في Tests.py والتي تحدد الاختبارات التي سيتم إدارتها بواسطة عداء Django.

import unittest
import doctest
from project import views

def suite():
    suite = unittest.TestSuite()
    suite.addTest(doctest.DocTestSuite(views))
    return suite

ثم قم فقط بتشغيل الاختبارات الخاصة بك كالمعتاد وسترى الدكتوراه في العرض.

$ python manage.py test project

هذا موصوف بمزيد من التفصيل في وثائق اختبار Django

عند تشغيل الاختبارات الخاصة بك ، فإن السلوك الافتراضي لأداة الاختبار هو العثور على جميع حالات الاختبار (أي الفئات الفرعية لـ unittest.testcase) في النماذج. وتشغيل هذا الجناح.

هناك طريقة ثانية لتحديد جناح الاختبار لوحدة: إذا قمت بتحديد وظيفة تسمى Suite () في إما النماذج .py أو tests.py ، فسيستخدم عداء اختبار Django هذه الوظيفة لبناء جناح الاختبار لتلك الوحدة النمطية. هذا يتبع المنظمة المقترحة لاختبارات الوحدة. راجع وثائق Python لمزيد من التفاصيل حول كيفية إنشاء مجموعة اختبار معقدة.

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

import unittest
import doctest
from project import views

class FooTestCase(unittest.TestCase):
    def testFoo(self):
        self.assertEquals('foo', 'bar')

def suite():
    suite = unittest.TestSuite()
    suite.addTest(doctest.DocTestSuite(views))
    suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FooTestCase))
    return suite

نصائح أخرى

الأشياء لها تغير في Django 1.6:

لن يتم اكتشاف الدكتوراه تلقائيًا. لدمج الدكتوراه في جناح الاختبار الخاص بك ، اتبع توصيات في وثائق بيثون.

لذلك كل ما كان علي أن أفعله بنفسي كان (في my_app/tests.py):

import unittest
import doctest
from my_app import views

def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite(views))
    return tests

هذا هو بلدي tests/__init__.py التنفيذ ، بناءً على جيسي شيه الجواب:

import doctest
import unittest

list_of_doctests = [
    'myapp.views.myview',
    'myapp.forms.myform',
]
list_of_unittests = [
    'sometestshere',  # This file is myapp/tests/sometestshere.py
    'moretestshere',  # This file is myapp/tests/moretestshere.py
    'myapp.tests.othertest',  # Absolute paths also work.
]

def suite():
    suite = unittest.TestSuite()
    for t in list_of_doctests:
        suite.addTest(doctest.DocTestSuite(
            __import__(t, globals(), locals(), fromlist=["*"])
        ))
    for t in list_of_unittests:
        suite.addTest(unittest.TestLoader().loadTestsFromModule(
            __import__(t, globals(), locals(), fromlist=["*"])
        ))
    return suite

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

استخدم nosetests مع البرنامج المساعد لـ Django (اختبار Django-sane أو Django-Nose) واستخدم -مع العلم مع دكتوراه.

يعتمد نظام الاختبار الأصلي في Django على unittest صفقة. لذلك فهي ليست قوية قدر الإمكان.

أنصحك باستخدام أنف هذا متوافق متخلف unittest على المنشطات. استخدمه مع عداء اختبار Django الذي يستخدم الأنف. يمكنك تخصيص الأنف بعدة طرق بما في ذلك الإشارة إلى مواقع الاختبار المخصصة باستخدام -m علَم.

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

يمكنك محاولة كتابة بنفسك testrunner وانظر ، إذا كان يمكنك تضمين ملفات أخرى ليتم فحصها لاختبارات DOC.

http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner

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