Python mock创建一个伪对象,当其中任何一个';将使用s属性
例如,我在Django中有一个重用请求对象的方法:Python mock创建一个伪对象,当其中任何一个';将使用s属性,python,django,unit-testing,mocking,python-mock,Python,Django,Unit Testing,Mocking,Python Mock,例如,我在Django中有一个重用请求对象的方法: def dowork(request): # the sessionid is a query param of the callback from payment gateway print request.GET.get('sessionid') 当我编写unittest时,我需要创建一个伪请求对象,它应该具有GET属性,并且应该包含一个字典{'sessionid':'blah'} 如何使用模拟包实现这一点?为什么不使用内
def dowork(request):
# the sessionid is a query param of the callback from payment gateway
print request.GET.get('sessionid')
当我编写unittest时,我需要创建一个伪请求对象,它应该具有GET
属性,并且应该包含一个字典{'sessionid':'blah'}
如何使用模拟包实现这一点?为什么不使用内置的,它已经支持模拟会话了
def test_dowork(self):
session = self.client.session
session = ['sessionid'] = 'blah'
session.save()
response = self.client.get('/dowork/')
self.assertEqual(...)
要做到这一点,可以创建一个mock,并像其他python对象一样设置其属性 唯一需要注意的是,mock是专门化的,因此它们的属性会自动填充mock,这使得这非常容易。您不需要显式地将每个属性创建为模拟对象 比如说,
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')
您好,
sessionid
是一个查询参数,来自我们的信用卡网关的回调。当我调用request.GET.GET('sessionid')
时,它返回{'sessionid':'blah'}
,预期结果应该返回'blah'好的,我已经根据您的回答计算出了它。mock_request.GET.GET.return_value='blah'