Python 异常测试失败
当我保存一个用户模型时,我想检查它是否有用户名。 因此,我写了这个Python 异常测试失败,python,django,unit-testing,testing,django-testing,Python,Django,Unit Testing,Testing,Django Testing,当我保存一个用户模型时,我想检查它是否有用户名。 因此,我写了这个pre_save: @receiver(pre_save, sender=User) def validate_user(sender, instance, **kwargs): if len(instance.username) <= 5: raise Exception("Username too short") self.assertRaises(Exception, u.save) 测试失败了。为什么?是
pre_save
:
@receiver(pre_save, sender=User)
def validate_user(sender, instance, **kwargs):
if len(instance.username) <= 5: raise Exception("Username too short")
self.assertRaises(Exception, u.save)
测试失败了。为什么?是一种特殊的例外情况-作为第二个参数,您应该传递一个可调用的:
assertRaises(异常,可调用,*args,**kwds)
换句话说,不要调用u.save()
:
此外,您应该真正考虑使用自定义异常或使用内置的Django验证错误,而不是引发和捕获广泛的
异常
,因为我们不知道测试失败的地方,我认为它失败了,因为在assertRaises
尝试在save
调用中捕获它之前,它会在测试中引发异常。User.objects.create()将实例保存到数据库中,触发信号并引发异常,但不会为了测试目的捕获它。如果要在保存对象并抛出(预期的)错误之前实例化该对象,请使用u=User()
,然后尝试使用assertRaises捕获它,如@alecxe所说。@Saphire确定,它是如何失败的?谢谢
self.assertRaises(Exception, u.save)