如何正确断言Django中的ObjectDoesNotExist异常?
正确断言ObjectDoesNotExist异常的方法
你遇到的问题根源很明确:ObjectDoesNotExist是异常类,而你捕获到的e是这个类的实例,类和实例属于不同的对象类型,直接用self.assertEqual比较肯定会断言失败。
以下是几种正确的断言方式:
断言异常实例的类型
直接判断捕获到的异常是否是目标类的实例:try: is_user_login(...) # 传入触发异常的参数 except ObjectDoesNotExist as e: self.assertIsInstance(e, ObjectDoesNotExist) else: self.fail("未抛出预期的ObjectDoesNotExist异常")使用上下文管理器(更推荐)
利用unittest内置的assertRaises上下文管理器,无需手动捕获异常,框架会自动验证:with self.assertRaises(ObjectDoesNotExist): is_user_login(...) # 传入触发异常的参数验证异常的附加信息(如消息)
如果需要同时验证异常的具体内容,可以结合上下文管理器获取异常实例:with self.assertRaises(ObjectDoesNotExist) as ctx: is_user_login(...) # 验证异常消息(根据实际需求调整) self.assertEqual(str(ctx.exception), "用户未登录或不存在")
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

