2

例如,我在 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'}

我如何使用模拟包做到这一点?

4

2 回答 2

2

通过创建一个模拟,并像任何其他 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')
于 2014-08-18T22:09:30.043 回答
0

为什么不使用已经支持模拟会话的内置测试客户端?

def test_dowork(self):
    session = self.client.session
    session = ['sessionid'] = 'blah'
    session.save()
    response = self.client.get('/dowork/')
    self.assertEqual(...)
于 2014-08-18T22:03:30.120 回答