为什么 strategies.permutations 不提供最小的排列组合?
Why strategies.permutations does not provide the smallest set of permutations?
我编写了一个测试来验证给定函数对于指定为输入的列表的任何给定排列是否正确运行。
使用 hypothesis
python 包我试图构建这个测试用例。但是,生成的排列列表包含许多重复的测试用例。
例如,使用包含 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.
上发布
不幸的是,文档没有启发我,但也许我没有找对地方。
知道我做错了什么吗?
你没有做错任何事,假设就是这样运作的。它不(也不能)保证它不会生成重复的元素。它会尽最大努力尝试降低它们的频率,但通常不可能这样做,而且问题很少会出现更复杂的策略,因此不值得对少数可能的情况进行特殊处理。
如果可能的示例集足够小以至于您可以详尽地列举它并且避免重复对您来说真的很重要,您可能会发现 pytest.mark.parametrize 这样的示例更合适。
我编写了一个测试来验证给定函数对于指定为输入的列表的任何给定排列是否正确运行。
使用 hypothesis
python 包我试图构建这个测试用例。但是,生成的排列列表包含许多重复的测试用例。
例如,使用包含 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.
上发布不幸的是,文档没有启发我,但也许我没有找对地方。
知道我做错了什么吗?
你没有做错任何事,假设就是这样运作的。它不(也不能)保证它不会生成重复的元素。它会尽最大努力尝试降低它们的频率,但通常不可能这样做,而且问题很少会出现更复杂的策略,因此不值得对少数可能的情况进行特殊处理。
如果可能的示例集足够小以至于您可以详尽地列举它并且避免重复对您来说真的很重要,您可能会发现 pytest.mark.parametrize 这样的示例更合适。