我对 python 模拟很陌生,所以只是想理解它。在下面的代码中,下面指出的 1 和 2 语句之间有什么区别,因为最后我可以设置mock_response.status_code
与任一陈述
import requests
def get_data():
response = requests.get('https://www.somesite.com')
return response.status_code
if __name__ == '__main__':
print get_data()
现在下面的代码有什么区别,
from call import get_data
import unittest
from mock import Mock,patch
import requests
class TestCall(unittest.TestCase):
def test_get_data(self):
with patch.object(requests,'get') as get_mock:
1.get_mock.return_value = mock_response = Mock()
# OR
2.mock_response = get_mock.return_value
mock_response.status_code = 200
assert get_data() == 200
unittest.main()
看着docs https://docs.python.org/3/library/unittest.mock.html#the-mock-class)::
return_value:调用mock时返回的值。默认情况下,这是一个新的模拟(在第一次访问时创建)。请参阅 return_value 属性。
你在嘲笑get
的功能requests
模块。这get
方法应该返回一个response
稍后您断言它的对象status_code
。因此你告诉get
模拟函数返回模拟response
。根据文档,return_value
默认情况下返回一个Mock
对象,因此 1 和 2 之间应该没有区别,除了 1 显式创建一个Mock
2 使用默认行为。
作为旁注,该单元测试没有测试任何内容,因为您设置了status_code
on the Mock
对象,然后断言它。就像是:
status_code = 200
assert status_code == 200
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)