python - 为什么 strategy.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 更合适。
推荐阅读
- spring - 如何在 Spring Security 的响应标头中使用密钥而不是“Set-Cookie”?
- jquery - Jquery 数据表特定列搜索不起作用 - 搜索值未传递到服务器
- node.js - 命令处理程序 - Discord 欢迎嵌入
- scala - generalize Int -> Int, Int-> String, String -> String, String -> Int
- flutter - 如何在谷歌地图上获得地图旋转?
- linux - KVM 上 2 个隔离网络之间的路由
- python - 如何将数据文件上传到 Heroku 部署的 Dash Web 应用程序
- c - 使 7 年前的印刷品与现在兼容
- azure - Azure Service Fabric 应用程序 - 主机名和主机 IP 地址
- .net-core - 已通过身份验证后,如何在 .NET Core 3.1 中添加/更新声明?