热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我应该在Django模型中测试方法吗?

如何解决《我应该在Django模型中测试方法吗?》经验,为你挑选了1个好方法。

有没有理由测试模型方法,或者我应该假设Django正常工作并让他们未经测试?

这是我的模型和几个方法:

class SlackTeam(models.Model):
    ...

    def get_user(self, user_id):
        return self.users.filter(user_id=user_id).first()

    def deactivate(self):
        self.active = False
        self.initiator.access_token = ''
        self.initiator.save()
        self.initiator = None
        self.deactivated_at = timezone.now()
        self.save()

        if hasattr(self, 'slackbot'):
            self.slackbot.delete()

    def set_initiator(self, user):
        self.initiator = user
        self.save(update_fields=['initiator'])

    @classmethod
    def initialize(cls, team_id, name):
        return cls.objects.update_or_create(
            team_id=team_id, defaults={'name': name})[0]

    @classmethod
    def get_by_team_id(cls, team_id):
        return cls.objects.filter(team_id=team_id).first()

bruno desthu.. 5

您可以放心地假设基models.Model类上定义的方法有效.当然,你自己的方法 - 无论是自定义方法还是被覆盖方法 - 都必须进行测试.

作为旁注:Django模型的约定是定义在管理器上的表级工作的方法,而不是模型本身,因此至少应该在自定义管理器上定义get_by_team_id并且可能initialize应该定义.



1> bruno desthu..:

您可以放心地假设基models.Model类上定义的方法有效.当然,你自己的方法 - 无论是自定义方法还是被覆盖方法 - 都必须进行测试.

作为旁注:Django模型的约定是定义在管理器上的表级工作的方法,而不是模型本身,因此至少应该在自定义管理器上定义get_by_team_id并且可能initialize应该定义.


从技术上讲,没有 - 但这是大多数Django开发人员所期望的.坚持使用约定可以使您的代码库更容易获得新手,因此请将其视为社交/可读性/可维护性改进(在管理器上使用表级方法可以明确哪些方法适用于实例,哪些方法适用于表级)而不是纯技术的.
推荐阅读
author-avatar
手机用户2502853557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有