簡體   English   中英

使用side_effect與mock時未調用異常

[英]Exception not called when using side_effect with mock

我在名為“my_module”的模塊中有一個名為“my_class”的類中的函數,該模塊包含以下代碼段:

try:
  response = self.make_request_response(requests.post, data, endpoint_path)
except requests.exceptions.HTTPError as err:
  if err.response.status_code == requests.codes.conflict:
    logging.info('Conflict error')

而我正試圖像這樣測試它:

error = requests.exceptions.HTTPError(mock.Mock(response=mock.Mock(status_code=409)), 'not found')
mock_bad = mock.Mock(side_effect=error)
mock_good = mock.Mock()
mock_good.return_value = [{'name': 'foo', 'id': 1}]


upsert = my_module.my_class(some_data)
with mock.patch.object(upsert, 'make_request_response', side_effect=[mock_bad, mock_good]) as mock_response:
    some_function()

我期望的是在我修補它之后在測試中引發HTTPError。 但是,當我運行測試時,永遠不會引發異常。 “response”實際上設置為mock_bad,它包含所需的異常,盡管它從未被引發過。 知道我哪里錯了嗎?

你把你的例外置於錯誤的副作用。 現在調用make_request_response()首先返回mock_bad模擬,它在調用之前不會引發該異常。

將異常放在mock.patch.object() side_effect列表中:

error = requests.exceptions.HTTPError(mock.Mock(response=mock.Mock(status_code=409)), 'not found')
mock_good = mock.Mock()
mock_good.return_value = [{'name': 'foo', 'id': 1}]


upsert = my_module.my_class(some_data)
with mock.patch.object(upsert, 'make_request_response', side_effect=[error, mock_good]) as mock_response:
    some_function()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM