Вы можете использовать ложную библиотеку, такую как Mocker , чтобы перехватывать вызовы библиотеки запросов и возвращать указанные результаты.
В качестве очень простого примера рассмотрим этот класс, который использует запросыбиблиотека:
class MyReq(object):
def doSomething(self):
r = requests.get('https://api.github.com', auth=('user', 'pass'))
return r.headers['content-type']
Вот модульный тест, который перехватывает вызов на requests.get
и возвращает указанный результат для тестирования:
import unittest
import requests
import myreq
from mocker import Mocker, MockerTestCase
class MyReqTests(MockerTestCase):
def testSomething(self):
# Create a mock result for the requests.get call
result = self.mocker.mock()
result.headers
self.mocker.result({'content-type': 'mytest/pass'})
# Use mocker to intercept the call to requests.get
myget = self.mocker.replace("requests.get")
myget('https://api.github.com', auth=('user', 'pass'))
self.mocker.result(result)
self.mocker.replay()
# Now execute my code
r = myreq.MyReq()
v = r.doSomething()
# and verify the results
self.assertEqual(v, 'mytest/pass')
self.mocker.verify()
if __name__ == '__main__':
unittest.main()
Когда я запускаю этот модульный тест, я получаю следующеерезультат:
.
----------------------------------------------------------------------
Ran 1 test in 0.004s
OK