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

