我正在尝试在我正在测试的函数上使用requests_mock。
#the function
def getModificationTimeHTTP(url):
head = requests.head(url)
modtime = head.headers['Last-Modified'] if 'Last-Modified' in head.headers \
else datetime.fromtimestamp(0, pytz.UTC)
return modtime
#in a test_ file
def test_needsUpdatesHTTP():
session = requests.Session()
adapter = requests_mock.Adapter()
session.mount('mock', adapter)
adapter.register_uri('HEAD', 'mock://test.com', headers= \
{'Last-Modified': 'Mon, 30 Jan 1970 15:33:03 GMT'})
update = getModificationTimeHTTP('mock://test.com')
assert update
这会返回一个错误,表明模拟适配器没有进入测试函数。
InvalidSchema: No connection adapters were found for 'mock://test.com'
如何将模拟适配器传递给函数?
答案 0 :(得分:1)
这不会起作用,因为您必须使用session.head
而不是requests.head
。
在不弄乱主要功能代码的情况下这样做的一种可能性是使用patch
:
from unittest.mock import patch
[...]
with patch('requests.head', session.head):
update = getModificationTimeHTTP('mock://test.com')
assert update