首页 > 解决方案 > 为什么 strategy.permutations 不提供最小的排列集?

问题描述

我编写了一个测试来验证给定函数对于指定为输入的列表的任何给定排列是否正确。

使用hypothesispython 包我尝试构建这个测试用例。但是,生成的排列列表包含许多重复的测试用例。

例如,使用 3 个项目的列表 ( ['a', 'b', 'c']) 我希望排列列表中有 6 个条目(abc、acb、bac、bca、cab、cba),但事实并非如此。

这是一个 MWE,假设您有假设包:

from hypothesis import given
from hypothesis.strategies import permutations

@given(permutations(['a', 'b', 'c']))
def test(permutation):
    print(permutation)

test()

或者,代码位于repl.it上。

不幸的是,文档并没有启发我,但也许我没有找对地方。

知道我做错了什么吗?

标签: pythonpermutationpython-hypothesis

解决方案


你没有做错任何事,这就是假设的工作原理。它不(也不能)保证它不会生成重复的元素。它尽最大努力尝试降低它们的频率,但一般来说不可能这样做,而且问题很少出现更复杂的策略,因此不值得在可能的少数情况下进行特殊封装。

如果可能的示例集足够小,您可以详尽地枚举它,并且避免重复对您来说非常重要,您可能会发现 pytest.mark.parametrize 更合适。


推荐阅读