python - 使用 Hypothesis Python 生成条件数据

标签 python testing property-based-testing python-hypothesis

我想生成具有以下条件的大小为 2 的整数列表的列表。

  • 第一个元素应小于第二个元素
  • 所有数据都应该是唯一的。

我可以使用自定义函数生成每个元组,但不知道如何使用它来满足第二个条件。

from hypothesis import strategies as st

@st.composite
def generate_data(draw):
    min_val, max_val = draw(st.lists(st.integers(1, 1e2), min_size=2, max_size=2))
    st.assume(min_val < max_val)
    return [min_val, max_val]

我可以通过以这种(低效?)方式迭代generate_date几次来生成数据:

>>> [generate_data().example() for _ in range(3)]
    [[5, 31], [1, 12], [33, 87]]

但是我如何检查数据是否唯一?

例如,以下值无效:

[[1, 2], [1, 5], ...]  # (1 is repeated)
[[1, 2], [1, 2], ...]  # (repeated data)

但以下内容有效:

[[1, 2], [3, 4], ...]

最佳答案

我认为以下策略可以满足您的要求:

import hypothesis.strategies as st

@st.composite
def unique_pair_lists(draw):
    data = draw(st.lists(st.integers(), unique=True)
    if len(data) % 2 != 0:
        data.pop()
    result = [data[i:i+2] for i in range(0, len(data), 2)]
    for pair in result:
        pair.sort()
    return result

这里的想法是,我们生成一些能够提供正确元素的东西,然后将其转换为正确形状的东西。我们不是尝试生成整数列表对,而是生成一个唯一整数列表,然后将它们分组(如果整数数量为奇数,则删除最后一个元素)。然后,我们对每一对进行排序,以确保其顺序正确。

关于python - 使用 Hypothesis Python 生成条件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49755719/

相关文章:

ruby - 为什么专家无法在 Controller 测试中找到策略?

javascript - TestCafe - 在 <select> 中选择选项

scala - 使用嵌套的 forAll 在 ScalaCheck 中生成的对象之间共享元素

Scalatest GeneratorDrivenPropertyChecks 初始化种子

Python - NumPy - 元组作为数组的元素

python - 如何将多个不同语言的 CSV 文件合并到一个 CSV 文件中?

unit-testing - 在 jestjs 中完成测试后无法登录

tdd - 基于负属性的测试

python - 使用 python 以错误的顺序从目录中提取文件

Python:AttributeError: 'str'对象没有属性 'datetime'