Я должен проверить некоторые функции с образцами данных:
data = [
[[10, 20, 30], 10],
[[20, 30], 20],
[[40], 30],
]
где первый элемент в каждой строке содержит списки N = (от 1 до 5) случайных целых элементов, сгенерированных через:
st.lists(
st.integers(min_value=10),
min_size=2,
max_size=5,
unique=True)
Второй элемент в каждой строке содержит случайную выборку из набора всех уникальных целых чисел из всех сгенерированных списков.
Так для моего примера data
:
Как реализовать такую стратегию с помощью системы тестирования гипотез?
Это не работает:
int_list = st.integers(min_value=10)
@given(st.lists(
elements=st.tuples(
int_list,
st.sampled_from(int_list))
Ознакомьтесь с документами по адаптации стратегий - вы можете сделать это с помощью .flatmap(...)
, но определение пользовательской стратегии с помощью @composite
может быть проще.
# With flatmap
elem_strat = lists(
integers(), min_size=2, max_size=5, unique=True
).flatmap(
lambda xs: tuples(just(xs), sampled_from(xs)).map(list)
)
# With @composite
@composite
def elem_strat_func(draw):
xs = draw(lists(
integers(), min_size=2, max_size=5, unique=True
)
an_int = draw(sampled_from(xs))
return [xs, an_int]
elem_strat = elem_strat_func()
# then use either as
@given(lists(elem_strat))
def test_something(xs): ...