【问题标题】:Hypothesis integer stategy with defined step size between test runs?在测试运行之间定义步长的假设整数策略?
【发布时间】:2018-08-13 06:51:35
【问题描述】:

我正在用builds() 编写一个自定义搜索策略(这与这个问题无关),它应该使用hypothesis.strategies.integers(min_value=None, max_value=None) 来生成具有显式步长的整数数据,比方说增量10。我不需要像[10, 20, 30, 40, etc.] 这样的值列表。相反,我需要使用步长为10 的整数值调用测试函数的后续调用,例如第一次调用10,第二次调用20,等等。我怎样才能最简单地实现这一点?

【问题讨论】:

    标签: python-hypothesis


    【解决方案1】:

    您可以轻松adapt existing strategies,例如通过以下方式生成偶数:

    integers().map(lambda x: x * 2)
    

    只是检查一下 - 您使用的是最新版本的假设吗?您链接到了 v1.8 的文档,该文档不受支持且功能远不如当前版本 3.48。

    最后,如果您需要在所构建的任何部分之间建立特定关系,请考虑使用 composite strategy - builds() 更简单,但不支持参数之间的依赖关系。


    我需要使用步长为 10 的整数值调用测试函数的后续调用,例如第一次调用 10,第二次调用 20,依此类推。

    Hypothesis 仅支持通过 the hypothesis.stateful module 进行状态测试。

    根据设计,@given 提供的每个示例都独立于任何其他示例 - 如果这不适用于您的用例,假设可能是该工作的错误工具。

    【讨论】:

    • 谢谢,我修复了最新文档的链接。我认为@composite 在这种情况下没有帮助。我对builds() 应该没问题。您的示例仅适用于我猜生成的当前值的范围。但我需要与以前生成的值相关...
    • 到目前为止我发现的所有示例都使用@given(st.integers().filter(lambda x: ...),就像来自here的示例...
    • 过滤更通用,但效率低得多,也不会缩小。您链接到的示例显示了过滤的影响是如何报告的 - 约 80% 的事件意味着减速五倍!我不确定您所说的“我需要与以前生成的值相关”是什么意思 - 请在您的问题中对此进行扩展。
    • 我发现的所有示例都仅与一般类型有关。例如。 @given(st.integers().filter(lambda x: x % 2 == 0)) 过滤偶数。但是,我需要过滤或使用类似 @given(st.integers().filter(lambda x: x[t] = x[t-1] +/- 1)) 这样的伪代码。
    • 我不知道你想用伪代码做什么 - 你不能在 lambda 中赋值,索引到整数 (x),我不知道@ 987654336@ 是。如果您想要一个整数列表,其中元素之间的特定关系要容易得多,并且您应该相应地编辑您的问题
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2011-09-30
    • 2015-11-28
    相关资源
    最近更新 更多