Ссылка на одну стратегию через другую - PullRequest
0 голосов
/ 27 мая 2019

При определении стратегий можно ли ссылаться на другую стратегию?

@given(maximum=strategies.floats(min_value=0),
       actual=strategies.floats(max_value=maximum))
def foo(maximum, actual):
    pass

Это броски NameError: 'maximum' not defined'

Edit:

Обходной путь (или, возможно, обходной путь), заключается в использовании функции assume гипотезы. В моем случае это выглядит так:

@given(maximum=strategies.floats(min_value=0),
       actual=strategies.floats(min_value=0))
def foo(maximum, actual):
    assume(actual <= maximum)
    pass

1 Ответ

1 голос
/ 27 мая 2019

Ваши параметры можно обобщить как «сделай это, отвергнув некоторые примеры» (с помощью .filter() или assume(), или «сделай это по построению».

Последний обычно более эффективен, хотя может потребовать больше кода. Если вы do хотите попытаться удовлетворить ваши ограничения по построению, вам нужно либо написать стратегию @st.composite, которая предоставляет несколько аргументов в виде кортежа; или перейдите к стратегии st.data() и начните интерактивно рисовать в своем тесте.

Или ... в таких простых случаях, как этот, вы можете просто поставить if actual > maximum: actual, maximum = maximum, actual в верхней части тестовой функции.

...