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

Django 2.0单元测试因AppRegistryNotReady无法运行的问题求助

解决Django单元测试导入模型时的AppRegistryNotReady错误

嘿,我来帮你搞定这个Django测试的问题!你遇到的AppRegistryNotReady错误,根源是手动设置环境变量的时机不对,而且其实完全没必要这么做——Django的TestCase已经帮你处理好了环境初始化的工作。

问题出在哪?

你在测试类的定义里直接写了os.environ.setdefault(...),这行代码会在类被加载的瞬间执行,而此时Django还没完成应用注册表的初始化,紧接着导入模型(比如from polls.models import Question)自然就会触发报错。而且,TestCase本身就会自动配置Django环境,根本不需要你手动设置环境变量。

修正后的测试代码

把你的测试代码改成这样就没问题了:

from django.test import TestCase
from polls.models import Question  # 现在可以正常导入模型了

class FirstTest(TestCase):
    def test_First(self):
        a = 1
        self.assertEqual(1, a)
        
    # 要是你需要测试模型功能,可以加个示例用例:
    def test_question_creation(self):
        question = Question.objects.create(question_text="测试问题", pub_date="2024-01-01")
        self.assertEqual(question.question_text, "测试问题")

正确的测试运行方式

别直接运行测试文件,在项目根目录下用Django官方的测试命令执行:

python manage.py test

这个命令会自动帮你初始化Django环境、加载所有应用配置,导入模型的操作自然就不会报错了。

额外小提示

  • 测试文件最好放在对应app的tests目录下(比如polls/tests/test_models.py或者直接polls/tests.py),这样Django的测试运行器能自动识别并执行它们。
  • 如果你非得手动运行测试文件(非常不推荐),那得在导入任何Django模块前先完成Django初始化:
import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testje.settings")
django.setup()  # 必须调用这行完成初始化

from django.test import TestCase
from polls.models import Question

class FirstTest(TestCase):
    def test_First(self):
        a = 1
        self.assertEqual(1, a)

但还是强烈建议用python manage.py test的方式,这才是符合Django最佳实践的做法。

内容的提问来源于stack exchange,提问作者Martijn Kamstra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:24:54