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

Hypothesis框架中能否使用缺失参数的@example部分示例装饰器?

Hypothesis框架中能否使用缺失参数的@example部分示例装饰器?

嘿,我懂你想实现的需求——就是希望给测试用例写部分示例,只指定部分参数,剩下的交给Hypothesis自动生成对吧?不过很遗憾,Hypothesis的@example装饰器默认要求必须传入测试函数的所有参数,你现在只传a=0却缺了b的写法,会直接触发报错,这是框架的设计逻辑:每个@example都得是一个完整的、能独立运行的测试用例快照。

那有没有办法实现类似“部分示例”的诉求?当然有,给你两个实用的解决思路:

  • 方案一:用st.just()固定部分参数,配合@given
    如果你只是想在某次测试中固定a=0,让Hypothesis自动生成b的取值,可以直接在@given里把a设为st.just(0),示例代码如下:

    @given(a=st.just(0), b=st.integers())
    def test_example(a, b):
        ...
    

    这样Hypothesis会始终使用a=0,同时随机生成各种整数作为b的取值来完成测试。

  • 方案二:用hypothesis.strategies.data()手动生成缺失参数
    如果你需要同时保留多组“部分固定”的场景(比如有时候固定a,有时候固定b),可以用data()策略在测试函数内部手动生成缺失的参数,示例代码:

    @given(data=st.data())
    def test_example(data):
        # 固定a=0,让data对象自动生成b的测试值
        a = 0
        b = data.draw(st.integers())
        ...
    

    这种方式灵活性更高,你可以在函数内部自由控制哪些参数固定、哪些由Hypothesis随机生成。

当然,最直接的方式还是给缺失的参数传一个明确的示例值,比如@example(a=0, b=1)——毕竟示例用例的核心就是明确可复现,多指定一个b的具体值也不会增加太多负担~

备注:内容来源于stack exchange,提问作者syvlorg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 15:59:43