كيف تكتب وتستخدم دكتست لكتابة كود الاختبار في سلاسل الوثائق في بايثون.

اعمال

تأتي Python مع وحدة عقيدة قياسية تختبر محتويات سلسلة docstring ، مما يسهل كتابة أمثلة الإدخال والإخراج في سلسلة docstring وتسهيل فهم التوثيق.

يتم توفير المعلومات التالية هنا.

  • مثال بسيط للاختبار مع الطبيب
    • إذا لم يكن هناك خطأ
    • إذا كان هناك خطأ
  • السيطرة على النتائج من خلال الخيارات والحجج
    • -vخيار
    • verboseحجة (مثل الوظيفة ، البرنامج ، البرنامج)
  • قم بتشغيل الوحدة النمطية الطبيب من سطر الأوامر
  • كتابة الاختبارات في ملف نصي خارجي
    • كيف تكتب ملف نصي
    • تم الاستدعاء من ملف py
    • مباشرة تنفيذ ملف نصي

مثال بسيط للاختبار مع الطبيب

سلسلة docstring عبارة عن سلسلة مضمنة في أحد العناصر التالية: (1) اسم الوظيفة المراد اختبارها ، (2) اسم الوظيفة المراد اختبارها ، و (3) قيمة الإخراج المتوقعة في وضع Python التفاعلي.

  • """
  • ''

إذا لم يكن هناك خطأ

تأكد من صحة الشفرة في الوظيفة ومحتويات docstring.

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    15
    '''

    return a + b


if __name__ == '__main__':
    import doctest
    doctest.testmod()

قم بتشغيل هذا الملف.

$ python3 doctest_example.py

إذا لم تكن هناك أخطاء ، فلن يتم إخراج أي شيء.

if __name__ == '__main__'هذا يعني “تنفيذ المعالجة اللاحقة فقط عندما يتم تنفيذ ملف البرنامج النصي المقابل من سطر الأوامر.

إذا كان هناك خطأ

إذا قمت بإنشاء وتنفيذ التعليمات البرمجية الخاطئة التالية ، فسيتم إخراج خطأ.

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    10
    '''

    return a * b


if __name__ == '__main__':
    import doctest
    doctest.testmod()
$ python3 doctest_example_error.py
**********************************************************************
File "doctest_example_error.py", line 3, in __main__.add
Failed example:
    add(1, 2)
Expected:
    3
Got:
    2
**********************************************************************
File "doctest_example_error.py", line 5, in __main__.add
Failed example:
    add(5, 10)
Expected:
    10
Got:
    50
**********************************************************************
1 items had failures:
   2 of   2 in __main__.add
***Test Failed*** 2 failures.

يظهر على النحو التالي.

قيم الإخراج المتوقعة مكتوبة في العقيدة.Expected
قيمة الإخراج الفعليةGot

السيطرة على النتائج من خلال الخيارات والحجج

-vخيار

إذا كنت تريد عرض نتائج الإخراج حتى في حالة عدم وجود أخطاء ، فقم بتشغيل الأمر باستخدام الخيار -v في سطر الأوامر.

$ python3 doctest_example.py -v
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

verboseحجة (مثل الوظيفة ، البرنامج ، البرنامج)

إذا كنت تريد دائمًا عرض نتائج الإخراج ، فحدد الوسيطة مطول = صحيح في Dectest.testmod () في ملف py.

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

سيتم عرض نتائج الإخراج دائمًا بدون خيار -v في وقت التشغيل.

$ python3 doctest_example_verbose.py
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

قم بتشغيل الوحدة النمطية الطبيب من سطر الأوامر

if __name__ == '__main__'إذا كنت تريد أن تفعل شيئًا آخر فيه ، يمكنك تشغيل الوحدة النمطية DOCTEST مباشرة من سطر الأوامر دون استدعاء DOCTEST.STMOD () في ملف py.

على سبيل المثال ، في الحالات التالية

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    15
    '''

    return a + b


if __name__ == '__main__':
    import sys
    result = add(int(sys.argv[1]), int(sys.argv[2]))
    print(result)

يمكنه تلقي وسيطات سطر الأوامر وتنفيذ العملية كالمعتاد.

$ python3 doctest_example_without_import.py 3 4
7

إذا قمت بتشغيل الدكتورة كبرنامج نصي مع الخيار -m ، فسيتم تشغيل الاختبار مقابل الوظيفة التي تتم كتابة العقيدة بها. إذا كنت تريد عرض نتائج الإخراج ، أضف -v كما كان من قبل.

$ python3 -m doctest doctest_example_without_import.py

$ python3 -m doctest -v doctest_example_without_import.py
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    doctest_example_without_import
1 items passed all tests:
   2 tests in doctest_example_without_import.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

كتابة الاختبارات في ملف نصي خارجي

يمكنك أيضًا كتابة كود الاختبار في ملف نصي خارجي بدلاً من كتابة التعليمات البرمجية في docstring.

كيف تكتب ملف نصي

اكتب في تنسيق الوضع التفاعلي Python ، كما هو موضح في docstring. من الضروري استيراد الوظائف المراد استخدامها.

إذا كنت تريد وضع الملف النصي في نفس الدليل مثل ملف .py المراد اختباره ، فما عليك سوى استيراده على النحو التالي.

>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15

تم الاستدعاء من ملف py

اتصل بـ DOCTEST.Testfile () في ملف .py آخر للاختبار.

حدد مسار الملف النصي حيث تتم كتابة كود الاختبار كمتغير للدلالة ().

import doctest
doctest.testfile('doctest_text.txt')

قم بتشغيل هذا الملف py.

$ python3 doctest_example_testfile.py -v
Trying:
    from doctest_example import add
Expecting nothing
ok
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items passed all tests:
   3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

مباشرة تنفيذ ملف نصي

حتى إذا لم يكن لديك ملف py ، يمكنك قراءة الملف النصي مباشرة من سطر الأوامر وتشغيل الاختبارات.

قم بتشغيل الأمر Python باستخدام الخيار -m لتشغيل الدكتورة كبرنامج نصي. يمكنك تحديد مسار الملف النصي كوسيطة سطر أوامر.

$ python3 -m doctest -v doctest_text.txt
Trying:
    from doctest_example import add
Expecting nothing
ok
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items passed all tests:
   3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.