इस उदाहरण में 'त्रुटि' कोई अपवाद वस्तु हो सकती है। मुझे लगता है कि शायद आपने एक कोड उदाहरण पढ़ा है जो इसे मेटासिंटाटिक प्लेसहोल्डर के रूप में इस्तेमाल करता है, जिसका अर्थ है "उपयुक्त अपवाद वर्ग"।
सभी अपवादों के बेसक्लास को 'अपवाद' कहा जाता है, और इसके अधिकांश उप-वर्गों में 'ओएसईआरर', 'वैल्यूएरर', 'नेमएरर', 'टाइप एरर' जैसे त्रुटि के प्रकार के वर्णनात्मक नाम हैं।
इस मामले में, उचित त्रुटि 'ValueError' है (foo का मान गलत था, इसलिए एक ValueError)। मैं आपकी स्क्रिप्ट में 'ValueError' के साथ 'त्रुटि' को बदलने की अनुशंसा करता हूं।
यहां कोड का एक पूरा संस्करण है जिसे आप लिखने की कोशिश कर रहे हैं, मैं सब कुछ डुप्लिकेट कर रहा हूं क्योंकि आपके मूल उदाहरण में एक अजीब कीवर्ड तर्क है कि आप एक असाइनमेंट के साथ उलझन में प्रतीत होते हैं, और मैं इसका उपयोग कर रहा हूं 'failUnless' समारोह नाम क्योंकि उस समारोह के गैर aliased नाम है:
class MyClass:
def __init__(self, foo):
if foo != 1:
raise ValueError("foo is not equal to 1!")
import unittest
class TestFoo(unittest.TestCase):
def testInsufficientArgs(self):
foo = 0
self.failUnlessRaises(ValueError, MyClass, foo)
if __name__ == '__main__':
unittest.main()
उत्पादन होता है:
.
----------------------------------------------------------------------
Ran 1 test in 0.007s
OK
वहाँ इकाई परीक्षण पुस्तकालय 'unittest' है कि अन्य इकाई परीक्षण में एक दोष है ढांचे तय करें। आप ध्यान दें कि कॉलिंग संदर्भ से अपवाद ऑब्जेक्ट तक पहुंच प्राप्त करना असंभव है। आप इसे ठीक करना चाहते हैं, तो आप unittest का एक उपवर्ग में उस विधि को फिर से परिभाषित करना होगा:
इस प्रयोग में इसके बारे में एक उदाहरण है:
class TestFoo(unittest.TestCase):
def failUnlessRaises(self, excClass, callableObj, *args, **kwargs):
try:
callableObj(*args, **kwargs)
except excClass, excObj:
return excObj # Actually return the exception object
else:
if hasattr(excClass,'__name__'): excName = excClass.__name__
else: excName = str(excClass)
raise self.failureException, "%s not raised" % excName
def testInsufficientArgs(self):
foo = 0
excObj = self.failUnlessRaises(ValueError, MyClass, foo)
self.failUnlessEqual(excObj[0], 'foo is not equal to 1!')
मैं unittest से failUnlessRaises समारोह की नकल की है। python2.5 से py और इसे थोड़ा संशोधित किया।
है जहां आप यह गलत हो गया था, यहाँ क्या आप के बजाय चाहता था, और यहाँ कोड है आप लिखने का इरादा है। यह शायद सबसे अच्छा जवाब है जिसे मैंने कभी देखा है। – LoveMeSomeCode
self.failUnlessRaises अब बहिष्कृत है। इसके बजाय self.assertRaises का उपयोग करें। https://docs.python.org/2/library/unittest.html#deprecated-aliases – dghubble
@LoveMeSomeCode '__init__' फ़ंक्शंस आमतौर पर किसी भी मान को वापस नहीं करते हैं। सामान्य 'unittests' मैं कार्यों के लिए देखता हूं, एक फ़ंक्शन द्वारा लौटाए गए मानों का परीक्षण करता हूं। क्या यह आमतौर पर आपके '__init__' कार्यों का परीक्षण करने की अनुशंसा करता है? यदि ऐसा है तो क्या आप '__init__' फ़ंक्शन के अंदर बदल गए मान का निरीक्षण करते हैं,' __init__' से संबंधित वर्ग के उदाहरण विशेषताओं तक सीधे पहुंच कर? –