我在测试基础
GET
根据
requests
模块。我在用
requests.Session
创建一个会话实例,稍后将其传递给函数。
我在嘲笑函数调用。我已经修补了
session.get
在函数内调用,但我得到以下错误:
断言错误:get('https://example-name/v1/0001')未找到呼叫
我假设我没有正确修补位置,但我不确定我具体哪里出了问题。
main.py
import requests
base_url = "https://example-name/v1/"
session = requests.Session()
def fetch_data_with_session(session, base_url, endpoint):
response = session.get(base_url + endpoint)
return response.json()
test_main.py
import unittest
from requests import Session
from main import fetch_data_with_session
from unittest.mock import Mock, patch
class TestingGet(unittest.TestCase):
@patch.object(Session, 'get')
def test_fetch(self, mock_get):
data = {
"id": "0001",
"name": "John Doe",
}
mock_response = Mock()
mock_response.json.return_value = data
mock_get.return_value = mock_response
mock_session = Mock()
retrieved_get_data = fetch_data_with_session(mock_session, "https://example-name/v1/", "0001")
mock_get.assert_any_call("https://example-name/v1/0001")
self.assertEqual = (outages_data, data)
if __name__ == '__main__':
unittest.main()
我也试着用
mock.get.assert_called_with
并得到了类似的错误。
assert_called_with
raise AssertionError(error_message)
AssertionError: expected call not found.
Expected: get('https://example-name/v1/0001')
Actual: not called.
同样,我假设我没有正确修补GET调用,但不确定如何纠正它。
编辑:谢谢@Guy提供的答案。更新的模块代码如下。请查看@Guy的回答以获取解释
@patch.object(requests.Session, 'get')
def test_fetch(self, mock_get):
data = {
"id": "exampleID",
"name": "example",
"devices": [
{
"id": "0001",
"name": "Device A"
}
]
}
mock_response = Mock()
mock_response.json.return_value = data
mock_get.return_value = mock_response
outages_data = fetch_data_with_session(mock_get, "https://example-name/v1/", "0001")
mock_get.get.assert_called_with("https://example-name/v1/0001")
self.assertEqual = (outages_data, data)