بيثون: لماذا فشل اختبار المستند هذا؟
سؤال
هذا الرمز الذي يعمل في أعمال مستندات عند تشغيله بحد ذاته، ولكن في هذا المستند يفشل في 10 أماكن. لا أستطيع معرفة سبب ذلك. فيما يلي الوحدة النمطية بالكامل:
class requireparams(object):
"""
>>> @requireparams(['name', 'pass', 'code'])
>>> def complex_function(params):
>>> print(params['name'])
>>> print(params['pass'])
>>> print(params['code'])
>>>
>>> params = {
>>> 'name': 'John Doe',
>>> 'pass': 'OpenSesame',
>>> #'code': '1134',
>>> }
>>>
>>> complex_function(params)
Traceback (most recent call last):
...
ValueError: Missing from "params" argument: code
"""
def __init__(self, required):
self.required = set(required)
def __call__(self, params):
def wrapper(params):
missing = self.required.difference(params)
if missing:
raise ValueError('Missing from "params" argument: %s' % ', '.join(sorted(missing)))
return wrapper
if __name__ == "__main__":
import doctest
doctest.testmod()
المحلول
Doctest يتطلب استخدامك ...
لخطوط الاستمرارية:
>>> @requireparams(['name', 'pass', 'code'])
... def complex_function(params):
... print(params['name'])
... print(params['pass'])
... print(params['code'])
...
>>> params = {
... 'name': 'John Doe',
... 'pass': 'OpenSesame',
... #'code': '1134',
... }
...
>>> complex_function(params)
نصائح أخرى
حاول لصق الكود بالضبط من موجه بيثون. هذا يعني أنها سوف تحتوي على بعض ...
إلى جانب >>>
. وبعد وإلا لن يعرف المحلل الدائم عندما يكون هناك تعبير متعدد الألوان.
على المعاينة: ما قاله جريج.
إليك الوحدة النمطية الخاصة بي بعد تصحيحها (يعمل الآن):
class requiresparams(object):
"""
Used as a decorator with an iterable passed in, this will look for each item
in the iterable given as a key in the params argument of the function being
decorated. It was built for a series of PayPal methods that require
different params, and AOP was the best way to handle it while staying DRY.
>>> @requiresparams(['name', 'pass', 'code'])
... def complex_function(params):
... print(params['name'])
... print(params['pass'])
... print(params['code'])
>>>
>>> params = {
... 'name': 'John Doe',
... 'pass': 'OpenSesame',
... #'code': '1134',
... }
>>>
>>> complex_function(params)
Traceback (most recent call last):
...
ValueError: Missing from "params" argument: code
"""
def __init__(self, required):
self.required = set(required)
def __call__(self, params):
def wrapper(params):
missing = self.required.difference(params)
if missing:
raise ValueError('Missing from "params" argument: %s' % ', '.join(sorted(missing)))
return wrapper
if __name__ == "__main__":
import doctest
doctest.testmod()
لا تنتمي إلى StackOverflow