如何在Djangounit testing中获取请求对象?

我有一个function

def getEvents(eid, request): ...... 

现在我想单独为上面的函数编写unit testing(不调用视图)。 那么我应该如何在TestCase调用上述内容。 是否有可能创build请求?

看这个解决scheme :

 from django.utils import unittest from django.test.client import RequestFactory class SimpleTest(unittest.TestCase): def setUp(self): # Every test needs access to the request factory. self.factory = RequestFactory() def test_details(self): # Create an instance of a GET request. request = self.factory.get('/customer/details') # Test my_view() as if it were deployed at /customer/details response = my_view(request) self.assertEqual(response.status_code, 200) 

如果你正在使用djangotesting客户端( from django.test.client import Client ),你可以像访问响应对象一样访问请求:

 from django.test.client import Client client = Client() response = client.get(some_url) request = response.wsgi_request 

或者如果您正在使用django.TestCasefrom django.test import TestCase, SimpleTestCase, TransactionTestCase ),则只需键入self.client即可访问任何testing用例中的客户端实例:

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

使用RequestFactory创build一个虚拟请求。

你的意思是def getEvents(request, eid)对吗?

使用Django的unittest,你可以使用from django.test.client import Client来提出请求。

看到这里: testing客户端

@ Secator的答案是完美的,因为它创build了一个模拟对象,这真的是一个非常好的unit testing的首选。 但是根据你的目的,使用Django的testing工具可能会更容易。

你可以使用djangotesting客户端

 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 

更多细节
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#overview-and-a-quick-example