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,提问作者김수민
相关产品推荐
相关产品推荐

