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

Pytest:何时使用pytest.raises与xfail进行异常测试

正确测试异常抛出的方式

首先得明确xfail和pytest.raises的核心区别:

  • xfail是用来标记预期会失败的测试用例,比如功能还没开发完、已知存在bug暂时没法修复,标记后测试就算失败也不会影响整体结果,但它不是用来验证异常的工具。
  • pytest.raises才是专门用来验证代码是否按预期抛出指定异常的正确方式,完全匹配你这个场景的需求。

具体用法示例

假设你的方法是这样的:

def parse_input(input_str):
    if not input_str.isdigit():
        raise ValueError("输入必须是数字格式")
    return int(input_str)

对应的测试用例应该用pytest.raises来验证异常:

def test_parse_input_invalid_format():
    with pytest.raises(ValueError) as exc_info:
        parse_input("abc")
    # 还能进一步验证异常信息是否符合预期
    assert "输入必须是数字格式" in str(exc_info.value)

什么时候才用xfail?

只有当你明确知道这个测试目前会失败,且这是预期内的情况(比如某个功能还在开发中、已知bug待修复),才用xfail标记,比如:

@pytest.mark.xfail(reason="数字格式校验逻辑尚未实现")
def test_parse_input_invalid_format():
    with pytest.raises(ValueError):
        parse_input("abc")

但这只是临时状态,等功能完成后要去掉xfail标记,让测试正常验证逻辑。

总结:你的场景是预期方法会抛出异常,这是功能的正常逻辑,所以必须用pytest.raises来验证,而非xfail。

内容的提问来源于stack exchange,提问作者user19898808

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:32:32