Стратегия гипотез: для каждого «ведра» нарисуйте одно значение из ведра

У меня есть следующий способ генерации случайных данных в одном из моих тестов:

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()]

Как я могу преобразовать это в стратегию гипотез?

Это моя попытка использовать hypothesis.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()]

Всего 1 ответ


Ваша попытка в основном правильная, за исключением того, что порядок итераций словаря может быть ненадежным - и, следовательно, примеры не могут воспроизводиться или сжиматься правильно. Я бы написал его в виде строки:

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

Есть идеи?

10000