मैं पायटेस्ट के साथ अपवादों का परीक्षण करना चाहता हूं। मैं एक HTTP अनुरोध भेजता हूं और प्रतिक्रिया प्राप्त करता हूं। मैं चाहता हूं कि प्रतिक्रिया भ्रष्ट हो, इसलिए response.json() ब्लॉक को छोड़कर चला जाता है। नीचे उदाहरण हैं।

एक अनुरोध भेजें, एक प्रतिक्रिया प्राप्त करें:

def send_message_json():
    # ...
    try:
        response = cls.send_message(method, url, **kwargs)
        if response:
            return response.json()  # this is what should fail
    except simplejson.errors.JSONDecodeError as err:
        raise err  # this is to be achieved

इकाई परीक्षण को यह कहना चाहिए कि simplejson.errors.JSONDecodeError को उठाया जाना चाहिए।

@mock.patch.object(Service, 'send_message_json')
def test_send_message_json_exception(mock_send):
    svc = Service()
    with pytest.raises(simplejson.errors.JSONDecodeError):  # this should assert the exceptions was raised
        svc.send_message_json("GET", 'http://my.url/')

मैं pytest.mock.object द्वारा उठाए गए अपवाद को सक्रिय करने में विफल रहता हूं। क्या .json() नकली में विफल हो जाएगा?

0
Eli Halych 23 अक्टूबर 2020, 14:18

1 उत्तर

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

मैंने वास्तविक अनुरोध की प्रतिक्रिया का मज़ाक उड़ाकर इसे समझ लिया।

  1. मूल प्रश्न में send_message_json() विधि है।
  2. यह send_message() विधि को कॉल करता है जो अनुरोध लौटाता है। प्रतिक्रिया। इसलिए मैंने send_message() के रिटर्न वैल्यू का मज़ाक उड़ाया जो कि send_message_json() के बजाय एक नकली भी है:
@mock.patch.object(Service, 'send_message')  # mock send_message instead
def test_send_message_json_exception(mock_send):
    
    svc = Service()

    mocked_response = Response()
    mocked_response.status_code = 200
    mocked_response.data = '<!doctype html>'  # so this is obviously not a JSON

    mock_send.return_value = mocked_response  # apply the mocked response here

    with pytest.raises(simplejson.errors.JSONDecodeError):
        svc.send_message_json("GET", 'http://my.url/')  # this calls send_message() and returns a bad mocked requests.Response
  1. खराब नकली अनुरोध। प्रतिक्रिया send_message_json() में mocked_response.json() पर विफल हो जाती है और simplejson.errors.JSONDecodeError उठाती है
0
Eli Halych 23 अक्टूबर 2020, 12:00