为什么strategy.permutations不提供最小的排列集?

时间:2019-07-02 19:58:39

标签: python permutation python-hypothesis

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

使用hypothesis python软件包,我尝试构建此测试用例。但是,生成的排列列表包含许多重复的测试用例。

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

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

from hypothesis import given
from hypothesis.strategies import permutations

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

test()

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

不幸的是,文档没有启发我,但也许我没有找到正确的位置。

对我在做什么错有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您没有做错任何事情,这就是假设的原理。它不能(也不能)保证不会生成重复的元素。它会尽最大努力降低频率,但是一般来说是不可能的,问题很少涉及更复杂的策略,因此在少数情况下不值得特别提及。

如果可能的示例集很小,以至于您可以详尽地枚举它,并且对避免重复确实很重要,那么您可能会发现像pytest.mark.parametrize这样的东西更合适。