Случай единственной гипотезы xfail с использованием pytest?

Используя pytest, я установил определенные параметры, чтобы завершился ошибкой, как ожидалось.

Однако мой набор тестов использует гипотезы. Это известная нам ошибка, которую мы не собираемся исправлять в этой версии API. Он уже задокументирован, и время, необходимое для его исправления, не стоит затраченных на данный момент усилий.

К счастью, гипотеза указывает на этот сбой каждый раз, когда запускается набор тестов, и мы научились игнорировать его. Очевидно, это плохо (особенно потому, что это заставляет нас игнорировать другие вещи, которых нам не следует).

Есть ли способ сообщить pytest, что для одного значения параметра ожидается отказ гипотезы? Я не хочу удалять его полностью, потому что на горизонте есть более крупный проект, который должен это исправить. Когда это произойдет, я хочу, чтобы гипотеза снова проверила это условие.

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

@given(inp=st.text(min_size=1))
def test_input(inp):
   ...

Моя цель - сказать, что когда inp равно определенному значению, следует ожидать неудачи. В противном случае этот тест должен пройти.


person NewGuy    schedule 08.07.2019    source источник
comment
Почему бы просто не пометить тест mark.xfail (информативным reason)? Если hypothesis выберет неудачный пример, тест будет xfail как единый объект (в любом случае нет нескольких тестов для каждого примера), xpassing, если пример был отсортирован.   -  person hoefling    schedule 09.07.2019


Ответы (1)


Вы можете условно xfail (или аналогично skip) итерацию

@given(inp=st.text(min_size=1))
def test_input(inp):
    if inp == some_value:
        pytest.xfail("Marking xfail as inp equals some_value")
person Amit Verma    schedule 08.07.2019
comment
Как разработчик Hypothesis и pytest, к сожалению, взаимодействие работает не так - вы можете проверить, запустив его с аргументами -s --hypothesis-verbosity=verbose; вместо пропуска или отказа в том, что он вызывает специальное исключение, а Hypothesis сокращает его, как обычно. Гораздо эффективнее просто использовать @pytest.mark.xfail в качестве декоратора. - person Zac Hatfield-Dodds; 12.07.2019
comment
@ ZacHatfield-Dodds - Спасибо за эту информацию. - person Amit Verma; 12.07.2019