2013-10-11 3 views
6

क्या पाइथन में कम परिभाषित निर्देशित वस्तुओं को नकल करने का कोई आसान तरीका है? उदाहरण के लिए, मैं आसानी से कैसे व्यक्त कर सकता हूं कि एकको एक निर्देश दिया गया है, मैं यह जांचना चाहता हूं कि इसमें प्रत्येक मान किसी विशेष मेटा-परिभाषा के अनुरूप है या नहीं, जैसे न्यूनतम और अधिकतम मान, लंबाई और प्रकार?कमजोर परिभाषित पायथन डॉक ऑब्जेक्ट्स का नकल करने का एक आसान तरीका

ऐसा करने में सक्षम होना आसान हो सकता है, उदाहरण के लिए, परीक्षण लिखते समय।

mock (unittest.mock अजगर संस्करणों में 3.3+) में एक निर्दिष्ट कर सकते हैं कि एक मूल्य ANY मूल्य हो सकता है, जैसे

>>> mock = Mock(return_value=None) 
>>> mock('foo', bar=object()) 
>>> mock.assert_called_once_with('foo', bar=ANY) 
हालांकि

, क्या ऊपर bar अगर

की तरह एक dict जैसी वस्तु होना चाहिए, में
>>> {'baz': <an integer between -3 and 14>, 'qux': <'yes' or 'no'>} 

उत्तर

5

मैं वास्तव में लिखा है AnyValid, एक न्यूनतम पुस्तकालय है कि महान काम formencode और unittest.mock में लागू का लाभ उठाता है, इस तरह के संभालने के लिए मामलों।

उदाहरण के लिए, ऊपर वर्णित की तरह एक dict वस्तु परीक्षण करना, फिर

>>> from mock import Mock 
>>> from any_valid import AnyValid, Int, OneOf 
>>> valid_bar = { 
...  'baz': AnyValid(Int(min=-3, max=14)), 
...  'qux': AnyValid(OneOf(['yes', 'no'])), 
...  } 
>>> mock = Mock(return_value=None) 
>>> mock('foo', bar={'baz': 4, 'qux': 'yes'}) 
>>> mock.assert_called_once_with('foo', bar=valid_bar) 
>>> 

रूप AnyValid formencode में सत्यापनकर्ता के बड़े सेट से किसी भी सत्यापनकर्ता ले जा सकते हैं, कई अन्य शर्तों में निर्दिष्ट किया जा सकता क्योंकि व्यक्त किया जा सकता एक समान अभिव्यक्तिपूर्ण तरीके।

+0

पुस्तकालय लिखने के लिए 9 मिनट, अच्छा –

संबंधित मुद्दे