Python 假设策略:针对每个;“桶”;,从桶中取出一个值

Python 假设策略:针对每个;“桶”;,从桶中取出一个值,python,testing,python-hypothesis,Python,Testing,Python Hypothesis,在我的一次测试中,我使用以下方法生成随机数据: import random data_categories = { 'a': [1, 2, 3], 'b': [4, 5], 'c': [6, 7, 8] } def make_record(): return [random.choice(vals) for vals in data_categories.values()] 如何将其转换为假设策略 这是我尝试使用的假设.strategies.composit

在我的一次测试中,我使用以下方法生成随机数据:

import random

data_categories = {
    'a': [1, 2, 3],
    'b': [4, 5],
    'c': [6, 7, 8]
}

def make_record():
    return [random.choice(vals) for vals in data_categories.values()]
如何将其转换为假设策略

这是我尝试使用的
假设.strategies.composite
,但很难知道我是否正确使用了它:

import hypothesis.strategies as hs

@hs.composite
def make_record(draw):
    return [draw(hs.sampled_from(vals)) for vals in data_categories.values()]

您的尝试基本上是正确的,只是字典迭代顺序可能不可靠,因此示例可能无法正确复制或收缩。我会以内联方式编写,如下所示:

my_strategy = hs.tuples(
    *[hs.sampled_from(data_categories[k]) for k in sorted(data_categories)]
).map(list)