我将pytest-mock wrapper与pytest一起使用。你知道吗
我找不到PropertyMock来处理requests package。你知道吗
下面是一个我尝试单元测试的函数示例:
def get():
url = f'http://foo.bar/'
response = requests.get(url)
if response.status_code != 200:
sys.exit(1)
return response.text
下面是我对单元测试的尝试:
import pytest
import my_module
import requests
def test_get(mocker, monkeypatch):
response_mock = mocker.MagicMock()
status_code_mock = mocker.PropertyMock(return_value=200)
text_mock = mocker.PropertyMock(return_value='xyz')
type(response_mock).status_code = status_code_mock
type(response_mock).text = text_mock
monkeypatch.setattr(requests, 'get', response_mock)
my_module.get()
测试失败,因为response.status_code
没有返回200。你知道吗
我尝试在requests.get()
调用之后放置一个PDB断点,并检查了响应状态代码把我自己归于PDB。我得到一个MagicMock对象:
(Pdb) response.status_code
<MagicMock name='mock().status_code' id='4487925656'>
它是分配给
response
变量的requests.get
调用的返回值。你知道吗在此行中:
您将get方法本身替换为mock。但您可能想用调用时返回您的响应的东西来替换它,例如:
另一方面,考虑使用现有的pytest插件/装置来编写此代码。^{} 和^{} 都是不错的选择。例如,在
pip install requests_mock
之后,您的测试可以如下所示:相关问题 更多 >
编程相关推荐