python mock下面的return_value是什么

时间:2017-07-08 09:59:06

标签: python python-mock

我是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()

1 个答案:

答案 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