如何让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
相关产品推荐
相关产品推荐

