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

Django中如何为models.py的natural_key编写单元测试?

解决Django natural_key()属性的单元测试问题

你的测试代码存在两个关键问题导致失败:

1. assertEquals参数使用错误

assertEquals的正确用法是assertEquals(实际值, 预期值, 可选错误提示),你把元组的第二个元素当成了第三个参数,导致实际比较的是self.user1.natural_key(一个元组)和字符串"user@email.com",两者类型和内容都不匹配,测试必然失败。

2. 创建User对象时的语法错误

User.objects.create()里的email="user@email.com"后面缺少逗号,这会直接触发代码语法错误,需要补上。

修正后的测试代码

# 先修正创建对象的语法错误(添加逗号)
self.user1 = User.objects.create(
    email="user@email.com",
    username="username1"
)

def test_natural_key_is_created(self):
    # 直接比较返回的元组和预期元组
    self.assertEquals(self.user1.natural_key, ("user@email.com", "username1"))
    # 如果需要自定义错误提示,可以添加第三个参数
    # self.assertEquals(self.user1.natural_key, ("user@email.com", "username1"), "natural_key返回值不符合预期")

额外说明

因为你把natural_key定义成了@property,所以访问时用self.user1.natural_key(不带括号)是正确的。如果是普通方法(无@property装饰器),才需要调用self.user1.natural_key()。

内容的提问来源于stack exchange,提问作者김수민

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:34