【问题标题】:How to satisfy unique constraint in django unit test without hardcoding?如何在没有硬编码的情况下满足 django 单元测试中的唯一约束?
【发布时间】:2019-12-23 20:48:10
【问题描述】:

我在我的会员模型的电子邮件字段上设置了一个独特的约束。现在,在编写单元测试时,由于唯一约束到期,我的测试失败了。

def setUp(self):
    self.car_provider = mommy.make(Member, username="car_provider")
    self.car_provider.set_password("12345678")
    self.car_provider.save()

    self.applicant = mommy.make(Member, username="applicant")
    self.applicant.set_password("12345678")
    self.applicant.save()

我收到以下错误: “django.db.utils.IntegrityError:重复的键值违反了唯一约束“account_member_email_a727987b_uniq” 详细信息:密钥(电子邮件)=()已经存在。”

【问题讨论】:

  • 如果您的测试由于先前运行的现有状态而失败,则它不是单元测试。

标签: django unit-testing django-models unique-constraint model-mommy


【解决方案1】:

如果您将email 设置为唯一字段,您实际上必须对该案例进行测试并以某种方式处理该异常。

但是要让这个测试运行,你应该在每个mommy.make() 调用中为email 字段提供一个明确的值。或者,您可以使用 _fill_optional 选项使用随机生成的值填充它。

喜欢:

self.car_provider = mommy.make(Member, username="car_provider", _fill_optional=['email'])

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2020-03-30
    • 1970-01-01
    • 2021-04-08
    • 2023-01-09
    • 1970-01-01
    相关资源
    最近更新 更多