Python mock 创建假对象时返回字典,任何属性被使用时都会如此
举个例子,我在Django里有一个方法,它会重复使用请求对象:
def dowork(request):
# the sessionid is a query param of the callback from payment gateway
print request.GET.get('sessionid')
当我写单元测试的时候,我需要创建一个假的请求对象,这个对象应该有一个GET
属性,并且里面要包含一个字典{'sessionid': 'blah'}
我该如何使用mock这个工具来做到这一点呢?
2 个回答
0
你为什么不使用内置的测试客户端呢?这个客户端已经支持模拟会话了。
def test_dowork(self):
session = self.client.session
session = ['sessionid'] = 'blah'
session.save()
response = self.client.get('/dowork/')
self.assertEqual(...)
3
你可以通过创建一个模拟对象来做到这一点,然后像对待其他Python对象一样设置它的属性。
唯一需要注意的是,模拟对象是特别设计的,它的属性会自动用模拟对象填充,这样做起来非常简单。你不需要手动为每个属性都创建一个模拟对象。
比如说,
import mock
mock_request = mock.Mock()
mock_request.GET.get.return_value = {'sessionid': 'blah'}
x = mock_request.GET.get('sessionid')
assert x == {'sessionid': 'blah'}
mock_request.GET.get.assert_called_once_with('sessionid')