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
相关产品推荐
相关产品推荐

