Python Hypothesis框架下同一参数如何使用多种测试策略
你最初的代码无法运行,是因为@given装饰器传入的策略数量和测试函数的参数数量不匹配。要实现单参数对应多策略的需求,可以直接使用Hypothesis内置的one_of策略,它可以将多个测试策略组合为一个,运行时会随机从所有传入的子策略中生成测试用例,不需要拆分多个测试函数。
正确的代码实现如下:
from hypothesis import given from hypothesis.strategies import one_of, integers, floats from your_module import IntervalBin, IntervalClosing # 替换为实际的导入路径 @given(values=one_of(integers(), floats())) def test_lt_operator_interval_bin_numerical(values): interval_bin = IntervalBin(10, 20, IntervalClosing.Both) assert (interval_bin < values) == (interval_bin.right < values)
额外优化说明
- 如果你的业务逻辑不需要处理浮点数的非法特殊值,可以给
floats()加上参数过滤,比如floats(allow_nan=False, allow_infinity=False),避免无效测试用例导致断言失败。 - 如果后续需要新增测试的数值类型(比如
Decimal、分数等),只需要把对应的策略追加到one_of的参数列表中即可,无需额外修改测试逻辑,大幅降低代码冗余。
内容的提问来源于stack exchange,提问作者Mattia Surricchio
相关产品推荐
相关产品推荐

