为什么策略.渗透不能提供最小的排列集



我编写了一项测试以验证给定功能的行为正确,对于指定为输入的列表的任何给定置换。

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

例如,使用3个项目列表(['a', 'b', 'c'](,我希望排列列表中有6个条目(ABC,ACB,BAC,BCA,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上进行的。

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

对我做错了什么的想法?

您没有做错任何事情,这就是假设的工作方式。它不能(也不能(保证它不会生成重复的元素。它尽了最大的努力来降低其频率,但总的来说,这是不可能的,而且问题很少提出更复杂的策略,因此不值得特别套管可能的少数情况。

如果一组可能的示例足够小,您可以详尽地枚举它,对您来说确实很重要,那么您可能会找到诸如pytest.mark.mark.parametrize更适合的东西。

最新更新