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

Python/Django测试类复用实现及PyCharm引用、unittest运行问题求解

问题1:当前实现方式是否合理?

合理,你将所有Django页面通用的测试逻辑抽离为独立基类,大幅减少了各页面测试用例的重复代码,后续如果要调整通用测试规则,只需要修改基类即可同步所有页面的测试逻辑,可维护性很高。

问题2:该实现是否属于Mixin的使用范畴?

属于。Mixin的核心特征是封装通用功能、不独立使用,仅作为父类给其他业务类多继承以混入对应能力。你的SinglePageTest本身不承担独立测试功能,只提供通用测试方法给继承了Django测试基类的业务测试类使用,完全符合Mixin的定义。

问题3:如何让PyCharm正确识别assertTemplateUsed、client.get等方法的引用?

推荐直接让基类继承Django的SimpleTestCase,同时可以解决后续unittest尝试运行基类测试用例的问题,优化后的完整基类代码如下:

from django.test import SimpleTestCase
from django.urls import reverse, resolve
from unittest import SkipTest

class BaseSinglePageTest(SimpleTestCase):
    str_reverse = ''
    adresse = ''
    template = None
    template_path = ''
    str_contain = ''

    def setUp(self):
        # 判断如果是基类本身直接跳过测试,解决unittest运行基类用例的问题
        if self.__class__ is BaseSinglePageTest:
            raise SkipTest(f"{self.__class__} is an abstract base class")
        super().setUp()
        self.url = reverse(self.str_reverse)
        self.view = resolve(self.adresse)
        self.response = self.client.get(self.url)

    def test_status_200(self):
        self.assertEqual(self.response.status_code, 200)

    def test_templates_home(self):
        self.assertTemplateUsed(self.response, self.template_path)

    def test_contains_HTML(self):
        self.assertContains(self.response, self.str_contain)

    def test_url_resolve(self):
        self.assertEqual(self.view.func.__name__, self.template.as_view().__name__)

对应的业务测试类使用方式可以简化为:

from DjangoTools.testing import BaseSinglePageTest
from .views import RetrievePasswordView

class RetrievePasswordTest(BaseSinglePageTest):
    def setUp(self):
        self.str_reverse = 'retrieve-password'
        self.adresse = '/accounts/retrieve-password'
        self.template = RetrievePasswordView
        self.template_path = 'accounts/retrieve-password.html'
        self.str_contain = '<h1>🔑 Récupérer le <span class="clr-org">mot de passe</span></h1>'
        super().setUp()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:15:03