Использование данных с параметризацией - PullRequest
3 голосов
/ 06 апреля 2020

Мне было интересно, можно ли использовать given с параметрами, полученными из функции parametrize pytest.
Пример:


import pytest
from hypothesis import given
from hypothesis import strategies as st


@st.composite
def my_strategy(draw, attribute):
    # Body of my strategy
    return # Something...

@pytest.mark.parametrize("attribute", [1, 2, 3])
@given(my_strategy(attribute))
def test_foo(strategy):
    pass

Вкл. @given(my_strategy(attribute)) Я хочу, чтобы attribute быть параметризованным атрибутом и генерировать новые my_strategy при каждом запуске с требуемым attribute

Как я могу это сделать?

1 Ответ

2 голосов
/ 07 апреля 2020

Единственный возможный обходной путь, о котором я могу подумать, - это построить стратегию внутри теста и использовать data стратегии для рисования примеров, что-то вроде

import pytest
from hypothesis import given
from hypothesis import strategies as st


@st.composite
def my_strategy(draw, attribute):
    # Body of my strategy
    return # Something...

@given(data=st.data())
@pytest.mark.parametrize("attribute", [1, 2, 3])
def test_foo(attribute, data):
    strategy = my_strategy(attribute)

    example = data.draw(strategy)
    ...  # rest of the test

Но я думаю, что лучше можно будет написать стратегию, не смешивая ее с mark.parametrize:

@given(st.sampled_from([1, 2, 3]).flatmap(my_strategy))
def test_foo(example):
    ...  # rest of the test
...