如何在Python unittest单元测试中正确抛出并校验异常
Python unittest异常校验正确实现方案
你的代码现有问题
- 当前
second_digit_value4函数仅会返回布尔值,无论入参是什么都不会抛出ValueError,因此assertRaises捕获不到任何异常,测试必然运行失败 - 现有断言写法存在冗余:
self.assertFalse(second_digit_value4(22), False)中第二个参数是自定义报错信息,不需要传False,直接写self.assertFalse(second_digit_value4(22))即可
实现异常校验的两种方案
方案1:给原函数增加异常抛出逻辑
如果业务要求函数在入参不符合规则时抛出异常,先给函数加校验逻辑,示例如下:
def second_digit_value4(n): # 自定义校验规则,不符合则抛出对应异常 if not isinstance(n, int): raise ValueError("入参必须为整数") if n < 0: raise ValueError("入参不能为负数") return n % 10 == 4
对应的测试用例调整为传入不符合规则的入参触发异常:
def test_last_digit_value4(self): self.assertEqual(second_digit_value4(14), True) self.assertFalse(second_digit_value4(22)) # 传入非法入参触发ValueError,符合断言要求 with self.assertRaises(ValueError): second_digit_value4("23") # 传入字符串 with self.assertRaises(ValueError): second_digit_value4(-23) # 传入负数
方案2:移除无必要的异常校验逻辑
如果你只是要校验合法入参的返回值,不需要函数抛异常,直接删除assertRaises相关代码即可,修改后测试用例如下:
def test_last_digit_value4(self): self.assertEqual(second_digit_value4(14), True) self.assertFalse(second_digit_value4(22)) self.assertFalse(second_digit_value4(23))
内容的提问来源于stack exchange,提问作者Yoshua Villar
相关产品推荐
相关产品推荐

