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

Django单元测试抛出异常求助:简单测试代码执行失败

Django简单测试用例抛出异常的解决方案

问题描述

你编写了一个简单的Django测试用例,执行后出现FAILED (errors=1)的错误,测试代码如下:

import unittest
from django.test import Client
class ModelTest(unittest.TestCase):
    def setUp(self):
        self.client = Client()
    def test_basic(self):
        response = self.client.get('/login/')
        self.assertEqual(response.status_code, 200)

错误追踪信息片段:

Traceback (most recent call last):
File "C:\Python27\lib\unittest\case.py", line 329, in run
testMethod()
File "C:\inetpub\wwwroot\portal\ateris\po...

问题根源

你用了Python标准库的unittest.TestCase作为测试类的父类,但Django的测试需要依赖框架的测试环境初始化(比如数据库连接、应用配置加载、请求上下文准备等),标准的unittest.TestCase并不会帮你完成这些准备工作,所以当你尝试使用Client发起请求时,会因为Django环境未就绪而抛出异常。

解决方案

把测试类的父类换成django.test.TestCase就可以了——它继承了标准库的unittest.TestCase,同时会自动处理Django测试环境的初始化和清理工作。修改后的代码如下:

from django.test import Client, TestCase  # 直接导入Django的TestCase
class ModelTest(TestCase):  # 继承django.test.TestCase
    def setUp(self):
        self.client = Client()
    def test_basic(self):
        response = self.client.get('/login/')
        self.assertEqual(response.status_code, 200)

另外,记得用Django官方的测试命令来运行测试,而不是直接用python -m unittest:

python manage.py test

这条命令会自动发现项目中的测试用例,同时确保Django环境正确初始化。

额外提示

  • 如果你的测试涉及数据库操作,django.test.TestCase会自动创建独立的测试数据库,并在每个测试用例执行后回滚事务,保证测试之间的独立性。
  • 要是你的测试不需要数据库支持(比如只测静态文件、简单视图逻辑),可以用django.test.SimpleTestCase,它是更轻量的测试类,启动速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:11