You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表驱动测试中如何正确使用assertRaises并避免重复调用被测函数

表驱动测试优化:避免重复调用被测函数

在编写表驱动测试时,存在部分测试用例会抛出异常、部分不会的场景,开发者希望避免在两处重复调用被测函数my_code。直接向assertRaises传入None的方式会导致测试失败,当前采用的分支判断方案存在重复调用my_code的问题,最终通过在基础测试用例中添加辅助函数assertRaisesUnlessNone实现了目标。

初始尝试代码

尝试直接给assertRaises传None,但测试失败:

tests = [
   (0, None),
   (1, None),
   (-1, TooFewException),
   (99, None),
   (100, TooManyException),
]
for n, exc in tests:
    with self.assertRaises(exc):
        results = my_code(n)
        assert len(results) == n

现有分支方案代码

通过分支判断区分异常和正常场景,但存在my_code重复调用的问题:

tests = [
   (0, None),
   (1, None),
   (-1, TooFewException),
   (99, None),
   (100, TooManyException),
]
for n, exc in tests:
    if exc is not None:
        with self.assertRaises(exc):
            my_code(n)
    else:
        results = my_code(n)
        assert len(results) == n

优化后代码

在基础测试用例中实现assertRaisesUnlessNone辅助函数,统一逻辑,避免重复调用:

tests = [
   (0, None),
   (1, None),
   (-1, TooFewException),
   (99, None),
   (100, TooManyException),
]
for n, exc in tests:
    with self.assertRaisesUnlessNone(exc):
        results = my_code(n)
        assert len(results) == n

内容的提问来源于stack exchange,提问作者Thomas David Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:52:35