新使用模拟。在 python 2.7.13 上。
我正在围绕这个库构建一个包装器
https://github.com/sendgrid/sendgrid-python/blob/master/sendgrid/sendgrid.py
反过来,它会将此库用于任何 REST 调用
https://github.com/sendgrid/python-http-client/blob/master/python_http_client/client.py
我的测试代码看起来像
class TestSendgridUtils(unittest.TestCase):
def setUp(self):
self.sgsu = SubUser(api_key=RANDOM_API_KEY, hippo_user=RANDOM_USER_OBJ)
@patch('sendgrid.SendGridAPIClient')
@patch('python_http_client.Client')
def test_create(self, sgc_mock, http_client_mock):
self.sgsu.create()
expected_data = {
'email' : self.sgsu.sg_username
}
print http_client_mock.call_list()
sgc_mock.client.assert_called_with(request_body=expected_data)
我基本上是在尝试模拟进行 HTTP 调用的底层库。我的测试只是为了确保我将正确的参数传递给 sendgrid 模块。
现在,如果我运行测试,仍然会发出 HTTP 请求,这意味着我没有成功地模拟预期的库。
阅读模拟文档我知道补丁只在我实例化底层类的地方有效。但这必须在 setUp() 中,这意味着我的模拟在我的测试用例中不可用?
结果,我无法弄清楚在这种情况下如何使用模拟的最佳实践是什么。我也不知道我是否可以模拟“sendgrid.SendGridAPIClient”或者我是否需要模拟“python_http_client.Client”