【发布时间】:2020-02-05 21:21:55
【问题描述】:
我正在尝试在另一个文件中为上述方法编写一个单元测试,例如test.py。我无法模拟会话。
# app.py
import requests
def get_json_data(url, session):
response = session.get(url)
response.raise_for_status()
return response.json()
我带来了以下测试。失败了
class TestDoSessionGet(unittest.TestCase):
@mock.patch('requests.session')
def test_should_mock_session_get(self, mocker):
data = """{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}"""
j_data = json.loads(data)
#print(j_data)
mocker.return_value = Mock(ok=True)
mocker.return_value.json.return_value = j_data
response = get_json_data('https://jsonplaceholder.typicode.com/todos/1', requests.Session())
print(response)
self.assertTrue(mocker.called)
self.assertEqual(response, j_data)
【问题讨论】:
-
上述方法的单元测试应将模拟会话对象传递给该方法以测试其行为。您可以使用:docs.python.org/3/library/unittest.mock.html 更多示例:docs.python.org/3/library/unittest.mock.html#quick-guide
-
你不需要模拟会话;您只需在调用函数时将适当的会话(或类似会话的对象)传递给函数。
标签: python unit-testing mocking pytest python-unittest