Python如何运行单元测试?异常场景下assert断言怎么使用?
Python单元测试异常场景断言方案
首先你需要先修正两处前置问题:
- 原始类的
method是实例方法,第一个参数缺失self,修正后的代码如下:
class A: def method(self, file): if file: # <do something> else: raise Exception("file not found")
- 你现有测试代码里传的
' '是带空格的非空字符串,Python中判断为真值,不会触发else分支的异常,需要传''(空字符串)、None这类假值才会命中异常逻辑。
正确断言写法
你要测试的是指定场景下代码抛出预期异常,需要用unittest内置的assertRaises上下文管理器来包裹调用代码,示例如下:
from unittest import TestCase t1 = A() class Test(TestCase): def test_method_no_path(self): # 写法1:仅验证是否抛出指定类型的异常 with self.assertRaises(Exception): t1.method('') # 传入空字符串触发异常 # 写法2:同时验证异常类型和异常内容,严谨度更高 with self.assertRaises(Exception) as context: t1.method('') self.assertEqual(str(context.exception), "file not found")
逻辑说明
直接调用会抛出异常的方法会直接导致测试执行失败,assertRaises会自动捕获指定范围代码抛出的异常,和你预期的异常类型做比对,符合预期则测试通过,否则失败。如果你自定义了专属异常类型,建议把Exception替换成对应的自定义异常类,断言的准确性会更高。
内容的提问来源于stack exchange,提问作者titan575
相关产品推荐
相关产品推荐

