मैं यह पता लगाने की कोशिश कर रहा हूं कि पाइथन इकाई परीक्षण में assertRaises() का सही तरीके से उपयोग कैसे करें। मेरे पास मेरे फ़ंक्शन में एक ValueError है जो बढ़ जाता है। हालांकि, मेरे यूनिट परीक्षणों में परीक्षण करते समय, मुझे 'assertRaises()' का उपयोग करने के दो अलग-अलग तरीकों से मिश्रित परिणाम मिल रहे हैं।

जब मैं इस तरह परीक्षण लिखता हूं, तो यह काम करता है:

import unittest

class MyTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        pass

    def test_error(self):
        with self.assertRaises(ValueError):
            func(a)

हालांकि, अगर मैं नीचे की तरह अपना परीक्षण लिखता हूं, तो यह काम नहीं करता है, भले ही ValueError उठाया जाता है:

    def test_error(self):
        self.assertRaises(ValueError, func(a))

क्या किसी के पास कोई अंतर्दृष्टि है कि एक तरीका क्यों काम करेगा और दूसरा नहीं?

1
codingenthusiast 14 अप्रैल 2020, 08:00

1 उत्तर

सबसे बढ़िया उत्तर

asserRaises विधि एक चर तर्क सूची लेती है, जहां पहला तर्क फ़ंक्शन ऑब्जेक्ट होता है, और वैकल्पिक अन्य तर्क फ़ंक्शन तर्क होते हैं। आपको इसे या तो इस तरह से कॉल करना होगा (सामान्य तरीका):

def test_error(self):
    self.assertRaises(ValueError, func, a)

या लैम्ब्डा का उपयोग करना:

def test_error(self):
    self.assertRaises(ValueError, lambda: func(a))

आपके कॉल के साथ समस्या यह है कि यह assertRaises को कॉल करने से पहले आपके फ़ंक्शन को निष्पादित करेगा, क्योंकि फ़ंक्शन के बजाय फ़ंक्शन कॉल के परिणाम को एक तर्क के रूप में पारित किया जाता है - इसलिए अपवाद होगा इससे पहले assertRaises इसे संभाल पाता।

ऐसा कहने के बाद, मैं हमेशा संदर्भ प्रबंधक संस्करण पसंद करूंगा, क्योंकि यह बेहतर पठनीय है।

2
MrBean Bremen 14 अप्रैल 2020, 16:08