Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 异常测试失败_Python_Django_Unit Testing_Testing_Django Testing - Fatal编程技术网

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)