चलिए मान लेते हैं कि हमारे पास ऐसा है:
import py, pytest
ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'
class MyError(Exception):
def __init__(self, m):
self.m = m
def __str__(self):
return self.m
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
return i
# ---------------------- TESTS -------------------------
def test_foo1():
with pytest.raises(MyError) as e:
foo(3)
assert ERROR1 in str(e)
def test_foo2():
with pytest.raises(MyError) as e:
foo(11)
assert ERROR2 in str(e)
def test_foo3():
....
foo(7)
....
प्रश्न: मैं परीक्षण करने के लिए test_foo3 () कैसे बना सकता हूं कि कोई MyError नहीं बढ़ा है? यह स्पष्ट है, कि मैं अभी परीक्षण कर सकता हूं:
def test_foo3():
assert foo(7) == 7
लेकिन मैं pytest.raises () के माध्यम से परीक्षण करना चाहता हूं। क्या कोई संभव है? उदाहरण के लिए: एक मामले में, उस फ़ंक्शन "फू" का कोई रिटर्न-वैल्यू नहीं है,
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
यह इस तरह से परीक्षण करने के लिए समझ में आता है, इम्हो।
foo(7)
ठीक है। आपको सही संदेश मिलेगा और सभी पाइस्टेस्ट आउटपुट के साथ डिबग करना आसान होगा। @Faruk ('Unexpected error...'
) से आपने जो सुझाव मांगा था वह त्रुटि के बारे में कुछ नहीं कहता है और आप अटक जाएंगे। केवल एक चीज जो आप इसे बेहतर बनाने के लिए कर सकते हैं वह है जैसे आपका इरादाtest_foo3_works_on_integers_within_range()
।