编写包含数据库更改(例如更改实体状态)的django单元测试用例的最佳方法是什么??? 例如: 我有不同的测试用例,其中实体的状态根据导致数据库级别更改的用户操作而有所不同。
处理此类操作的测试用例的最佳方法是什么。
def post(self, request, *args, **kwargs):
if action==1:
Entity.last_status= Entity.status
Entity.status = 1
Entity.save()
elif action == 2:
Entity.last_status = Entity.status
Entity.status = 2
Entity.save()
以此类推... !!! –
答案 0 :(得分:0)
您好Django有很多用于测试此目的的TestCase对象:
一个小类的例子:
import unittest
from django.test import Client
class SimpleTest(unittest.TestCase):
def setUp(self):
self.client = Client()
def test_action_1(self):
# Issue a POST request.
response = self.client.post('/YOUR_POST_URL/', {'action': 1})
# Check that the response is 200 OK.
self.assertEqual(response.status_code, 200)
# Check the last entry
last_entry = Entry.objects.last()
self.assertEqual(last_entry.status, 1)
response = self.client.post('/YOUR_POST_URL/', {'action': 2})
# Check that the response is 200 OK.
self.assertEqual(response.status_code, 200)
# Check that the response is 200 OK.
self.assertEqual(response.status_code, 200)
# Check the last entry
last_entry = Entry.objects.last()
self.assertEqual(last_entry.status, 2)
self.assertEqual(last_entry.last_status, 1)
此测试做什么?
他将创建一个空数据库进行迁移,并发出带有参数POST
的{{1}}请求,我们检查状态为200(已执行且无错误),并检查数据库中是否现在action=1
与Entry
。
现在,我们对参数status=1
进行相同操作,并立即检查action=2
和status
。
答案 1 :(得分:0)
您可以使用MaximeK的答案中所述的Django测试Client
,或者另一种方法是直接调用视图。您可以创建HttpRequest
对象,并在调用它时将其传递到视图中。
from django.http import HttpRequest
def test_set_entity_status(self):
# Set up the request
request = HttpRequest()
request.method = 'POST'
request.POST['action'] = 1
# Call the view function directly
post(request)
# Perform the assertions
last_entity = Entity.objects.last()
self.assertEqual(last_entity.status, 1)