You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:45:04