Проверка гипотез: как выбрать значения из другой стратегии? - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно протестировать некоторую функцию с примерами данных:

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 примера:

  • списки содержат значения из уникального набора (10,20,30,40);
  • вторые элементы в каждой строке содержат случайную целочисленную выборку из этого набора;

Как реализовать такоестратегия со структурой тестирования гипотез?

Этот не работает:

int_list = st.integers(min_value=10)

@given(st.lists(
    elements=st.tuples(
        int_list, 
        st.sampled_from(int_list))

1 Ответ

0 голосов
/ 21 сентября 2018

Ознакомьтесь с документами по адаптации стратегий - вы можете сделать это с помощью .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): ...
...