1
當我保存用戶模型時,我想檢查它是否有用戶名。 因此,我寫了這個pre_save
:異常測試失敗
@receiver(pre_save, sender=User)
def validate_user(sender, instance, **kwargs):
if len(instance.username) <= 5: raise Exception("Username too short")
現在,在我的測試方法,我想測試此異常:
def test_user_no_username(self):
u = User.objects.create()
self.assertRaises(Exception, u.save())
測試失敗。爲什麼?
我會補充一點,因爲我們不知道測試失敗的位置,所以我認爲它會失敗,因爲它會在'assertRaises'試圖在'save'調用中捕獲它之前在測試中引發異常。 User.objects.create()會將實例保存到數據庫中,觸發信號並拋出異常,但不會爲了測試目的而捕獲該異常。如果你想在保存它並拋出(預期的)錯誤之前實例化對象,使用'u = User()',然後試着用@alecxe說的assertRaises來捕獲它。 – ryanmrubin
它沒有區別,仍然不起作用。 – Saphire
@Saphire好吧,它是如何失敗?謝謝。 – alecxe