Django TestCase如何实现仅在所有测试用例前运行一次初始化逻辑
你可以使用Django TestCase 提供的类级初始化方法 setUpTestData 实现需求,该方法仅会在当前测试类的所有测试用例执行前运行一次,不会重复执行,不会出现重复创建实例触发数据冲突的问题。
修改后的代码如下:
import json from django.test import TestCase from rest_framework import status class PostTest(TestCase): @classmethod def setUpTestData(cls): # 初始化逻辑仅执行一次,创建的类属性可被全部测试用例共享 GoalCategory.objects.create(category='other', emoji_url='url') cls.user = UserFactory() cls.goal = GoalFactory() def test_create_post(self): response = self.client.post(reverse('post'), data=json.dumps({'creator_id': str(self.user.uuid), 'goal_id': str(self.goal.uuid), 'body': 'Some text #Test'}), content_type='application/json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) def test_no_goal_create_post(self): response = self.client.post(reverse('post'), data=json.dumps({'creator_id': str(self.user.uuid), 'goal_id': 'some messed up UUID', 'body': 'Some text #Test'}), content_type='application/json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) def test_no_user_create_post(self): response = self.client.post(reverse('post'), data=json.dumps({'creator_id': 'messed up user', 'goal_id': str(self.goal.uuid), 'body': 'Some text #Test'}), content_type='application/json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
注意事项
setUpTestData内创建的对象是所有测试用例共享的,如果你需要在单个测试用例中修改这些对象属性,不要直接修改共享实例,否则会影响后续测试用例的执行结果,需要修改的独立数据建议仍放在setUp方法中初始化- 该方法运行在测试类的全局事务中,所有测试用例执行完毕后会自动回滚,不会产生脏数据
内容的提问来源于stack exchange,提问作者user12314098
相关产品推荐
相关产品推荐

