如何为Python中generate_grid函数触发的IndexError编写单元测试
解决单元测试中验证函数抛出指定异常的问题
你之前的断言写法完全错误:当generate_grid(-4, Dices)抛出IndexError时,程序会直接终止,不会返回任何字符串,你的断言语句根本没有执行的机会。要验证函数是否抛出指定异常,得用专门的异常捕获断言方式,下面是两种常用方案:
方案1:使用Python标准库unittest
import unittest from your_module import generate_grid, Dices # 替换为你的实际模块名 class TestGenerateGrid(unittest.TestCase): def test_negative_n_triggers_index_error(self): # 用上下文管理器捕获异常 with self.assertRaises(IndexError) as error_context: generate_grid(-4, Dices) # 可选:验证异常的具体提示信息 self.assertEqual(str(error_context.exception), "list index out of range") if __name__ == '__main__': unittest.main()
方案2:使用pytest(更简洁)
如果用pytest作为测试框架,写法更直观:
import pytest from your_module import generate_grid, Dices # 替换为你的实际模块名 def test_negative_n_triggers_index_error(): # 直接指定要捕获的异常和匹配的错误信息 with pytest.raises(IndexError, match="list index out of range"): generate_grid(-4, Dices)
核心要点
- 必须用**上下文管理器(
with语句)**包裹函数调用,让测试框架负责捕获异常,避免程序直接终止。 - 如果不需要验证错误信息,只保留
assertRaises(IndexError)或pytest.raises(IndexError)即可;如果需要精确匹配错误文本,再添加对应的断言或match参数。
内容的提问来源于stack exchange,提问作者Lilian.save.it
相关产品推荐
相关产品推荐

