Python 如何在django单元测试中获取请求对象?

Python 如何在django单元测试中获取请求对象?,python,django,django-testing,Python,Django,Django Testing,我有一个函数作为 def getEvents(eid, request): ...... 现在我想分别为上述函数编写单元测试(不调用视图)。 那么我应该如何在TestCase中调用上面的代码呢。是否可以创建请求?请参阅: 你的意思是def getEvents(请求,eid)对吗 使用Django unittest,您可以使用来自Django.test.client导入客户端的发出请求 请看这里: @Secator的答案是完美的,因为它创建了一个模拟对象,这是一个非常好的单元测试的首选对

我有一个函数作为

def getEvents(eid, request):
    ......
现在我想分别为上述函数编写单元测试(不调用视图)。 那么我应该如何在
TestCase
中调用上面的代码呢。是否可以创建请求?

请参阅:


你的意思是
def getEvents(请求,eid)
对吗

使用Django unittest,您可以使用来自Django.test.client导入客户端的
发出请求

请看这里:


@Secator的答案是完美的,因为它创建了一个模拟对象,这是一个非常好的单元测试的首选对象。但根据您的目的,只使用Django的测试工具可能更容易。

用于创建虚拟请求。

如果您使用Django测试客户端(
来自Django.test.client import client
),您可以从响应对象访问请求,如下所示:

from django.test.client import Client

client = Client()
response = client.get(some_url)
request = response.wsgi_request
或者,如果您使用的是
django.TestCase
来自django.test导入TestCase、SimpleTestCase、TransactionTestCase
),则只需键入
self.client
,即可访问任何测试用例中的客户端实例:

response = self.client.get(some_url)
request = response.wsgi_request

您可以使用django测试客户端

from django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
response = c.get('/customer/details/')
response.content
有关更多详细信息

此代码实际上从1.3版开始就包含在Django中。如果我没有看错,那么来自工厂的假请求不会通过中间件过滤。
from django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
response = c.get('/customer/details/')
response.content