我有一種情況,就是類似於這樣:如何使用requests_mock來確保調用正確的會話?
import unittest
import requests_mock
import requests
import mock
class ClassUnderTest:
def __init__(self):
self.session = requests.Session()
self.foo_url = 'http://google.com'
def do_foo(self):
return self.session.get(self.foo_url)
def do_foo_failing(self):
# I want to prevent accidentally doing this sort of operation
# instead of reusuing self.session
return requests.get(self.foo_url)
我想,以確保該方法正確執行,也保證了我使用的self.session
對象。在實踐中,我遇到了這個問題,因爲我錯誤地添加了一個requests.get
而不是重新使用同一個會話。
然而,這意味着這樣的測試不實際測試這一功能:
class TestClassUnderTest(unittest.TestCase):
@requests_mock.mock()
def test_do_foo_should_pass(self, m):
c = ClassUnderTest()
m.get('http://google.com', status_code=200)
r = c.do_foo()
self.assertEqual(200, r.status_code)
self.assertEqual(m.call_count, 1)
@requests_mock.mock()
def test_do_foo_should_fail(self, m):
c = ClassUnderTest()
m.get('http://google.com', status_code=200)
r = c.do_foo_failing()
self.assertEqual(200, r.status_code)
self.assertEqual(m.call_count, 1)
我曾經想過用模擬替代self.session
,但後來我也有做的事情,比如集合STATUS_CODE的模擬(和在我的真實代碼示例中,我還需要執行諸如添加模擬.json()
method以便正確使用響應的代碼功能)。
有沒有一種方法可以使用requests_mock來有效地保證只有self.session
被使用(在本例中不是requests.get
)?