دوك تيست
هذه مقالة غير مراجعة.(أكتوبر 2020) |
يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. (أكتوبر 2020) |
دوك تيست هو عبارة عن عنصر في المكتبة القياسيه في لغة البرمجة بايثون واللتي تتيح عمل اختبارات بطريقه سهله وسلسله بناءا على المخرجات من قشرة المترجم أو المفسر تٌقص وتلصق إلى سلاسل ال دوك.
محددات التنفيذ
ال دوك تيست يقوم باستخدام امكانيات البايثون الاتيه بطريقه مبتكره.
- سلاسل ال دوت
- قشره البايثون التفاعلية
- تفتيش البايثون العميق أو الدقيق
عند استخدام البايثون، الحث الأول يتبع بالاوامر الجديده. والثاني عند تكمله الاوامر على عده اسطر ونتيجه تنفيذ الاوامر من المتوقع ان تكون على الاسطر التاليه سطر خالٍ، أو سطر اخر يبدأ بالحث الأول يرى بأنه المُخرج من الأمر ال دوك تيست يبحث عن الحث في متسلسلاته ويعيد تشغيل الاوامر المشتقه ويقارن النتيجة ب المخرجات المعطاة في امثله اختبار متلسلسلات الدوت الاجراء الافتراضي عند نجاح الاختبار هو ان لا يكون هنالك أي مخرج ويمكن تعديل هذا الخيار في مُشغل الدوك تيست. اضافه إلى ذلك أصبح الدوك تيست متكاملا مع عنصر اختبار الوحدة مما جعله مقياس معياري للوحد. مقياس الوحد يعطي خيارات اضافية عند إجراء الاختبرات مثل اعطاء تقارير ب احصائيات الاختبارات كنجاحه وفشله.
البرمجة الحرفية والدوك نيست
على الرغم ان الدوك تيست لا يسمح لبرنامج البايثون ان يندمج باللغة اليومية الا انه يسمح للامثله الموثقه ان تندمج في ال دوك سترينج حيث يمكنها ان تحتوي اشكال أخرى من النصوص ويمكن إنشاء ملفات يمكن ان تحتوي على مستندات، واختبارات والبرنامج طبعا مما يساعد الاختبار على تويقه والذي يسهل التلاحم بين الاختبار والبرنامج والمستند.
توثيق المكتبات عن طريق الامثله
الدوك تيست ملائم لاعطاء مقدمة للمكتبة من خلال التزويد كيف تعمل واجهه برمجه التطبيقات بناءا على اساسات نتائج مترجم البايثون التفاعلي، يمكن دمج النص بالاختبار وتجربته على المكتبة لتحقيق النتائج المطلوبة
الامثلة
المثال الأول: دوك تيست مدمج بمتسلسلات الدوك الخاصة ب داله
def list_to_0_index(lst):
"""A solution to the problem given in:
https://rgrig.blogspot.com/2005/11/writing-readable-code.html
'Given a list, lst, say for each element the 0-index where it appears for
the first time. So the list x = [0, 1, 4, 2, 4, 1, 0, 2] is
transformed into y = [0, 1, 2, 3, 2, 1, 0, 3]. Notice that for all
i we have x[y[i]] = x[i]. Use any programming language and any data
representation you want.'
>>> x = [0, 1, 4, 2, 4, 1, 0, 2]
>>> list_to_0_index(x)
[0, 1, 2, 3, 2, 1, 0, 3]
>>>
"""
return [lst.index(i) for i in lst]
المثال الثاني: دمج الدوك تيست بملف نص عادي
======================
Demonstration doctests
======================
This is just an example of what a README text looks like that can be used with
the doctest.DocFileSuite() function from Python's doctest module.
Normally, the README file would explain the API of the module, like this:
>>> a = 1
>>> b = 2
>>> a + b
3
Notice, that we just demonstrated how to add two numbers in Python, and
what the result will look like.
A special option allows you to be somewhat fuzzy about your examples:
>>> o = object()
>>> o # doctest: +ELLIPSIS
<object object at 0x...>
Exceptions can be tested very nicely too:
>>> x
Traceback (most recent call last):
...
NameError: name 'x' is not defined
المثال الثالث: كلمات مميزه
def unique_words(page):
'''Return set of the unique words in list of lines of text.
Example:
>>> from StringIO import StringIO
>>> fileText = """the cat sat on the mat
... the mat was ondur the cat
... one fish two fish red fish
... blue fish
... This fish has a yellow car
... This fish has a yellow star"""
>>> file = StringIO(fileText)
>>> page = file.readlines()
>>> words = unique_words(page)
>>> print sorted(list(words))
["This", "a", "blue", "car", "cat", "fish", "has", "mat",
"on", "ondur", "one", "red", "sat", "star", "the", "two",
"was", "yellow"]
>>>
'''
return set(word for line in page for word in line.split())
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
_test()
الدوك تيست وتكوين التوثيق
ال EpyText وال Docutils يدعمان صيغه اقسام الدوك تيست في متلسلسلات الدوك
التطبيق في لغات البرمجة الأخرى
++C اقرب تطبيق أو تنفيذ ممكن يمكن كتابة الاختبارات مباشرة في كود الإنتاج بأقل قدر من النفقات العامة ExUnit.DocT مشابه تماما لل دوك تيست Haskell تطبيق لل دوك تيست Elm كتابة التوثيق
Rust كتابة التوثيق