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

如何让Django测试基类的用例不执行且不标记为跳过?

解决Django测试基类不执行的方法

方法一:给基类添加__test__ = False属性

这是unittest内置的特性,只要在测试基类里加上__test__ = False,测试运行器就会自动跳过这个类的执行,而且不会标记为“跳过”状态。子类继承后不会继承这个属性(除非子类自己设置),所以子类的测试会正常执行。示例代码:

from django.test import TestCase

class BaseLoggedInTest(TestCase):
    __test__ = False  # 关键:告诉测试运行器不要执行这个类的测试

    def test_something(self):
        # 这里写通用的测试逻辑
        self.assertTrue(True)

class TestAdminUser(BaseLoggedInTest):
    def setUp(self):
        self.login_as_admin()  # 子类实现对应用户的登录逻辑

class TestRegularUser(BaseLoggedInTest):
    def setUp(self):
        self.login_as_regular_user()

方法二:把基类设为抽象基类

利用Python的抽象基类(ABC)机制,让基类无法被实例化,测试运行器就不会尝试执行它的测试方法。需要导入abc模块,给基类至少一个抽象方法——比如把setUp设为抽象方法,刚好子类本来就要重写setUp来实现登录,完美契合需求:

from django.test import TestCase
import abc

class BaseLoggedInTest(TestCase, metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def setUp(self):
        # 抽象方法,子类必须实现
        pass

    def test_something(self):
        # 通用测试逻辑
        self.assertTrue(True)

class TestAdminUser(BaseLoggedInTest):
    def setUp(self):
        self.login_as_admin()

class TestRegularUser(BaseLoggedInTest):
    def setUp(self):
        self.login_as_regular_user()

这两种方法都不需要额外的./manage.py test命令参数,也不会把基类测试标记为跳过状态,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:00:59