我是python mock的新手,所以只是想了解同样的事情。在下面的代码中,下面指出的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()
答案 0 :(得分:0)
查看docs:
return_value:调用mock时返回的值。默认情况下,这是一个新的Mock(在第一次访问时创建)。请参阅return_value属性。
您正在嘲笑get
模块的requests
功能。 get
方法应该返回一个response
对象,稍后您将声明其status_code
。因此,您告诉get
模拟函数返回模拟response
。根据文档,return_value
默认返回Mock
对象,因此1和2之间应该没有区别,除了1显式创建Mock
而2使用默认行为。
作为旁注,单元测试没有测试任何内容,因为您在status_code
对象上设置了Mock
然后断言它。它就像:
status_code = 200
assert status_code == 200