Это, похоже, связано с количеством успешных тестов hypothesis
пытается сгенерировать:
>>> from hypothesis import given, strategies as st
>>> @given(st.integers(0,1), st.integers(0,2))
... def test(x, y):
... print(x, y)
... assert True
...
>>> test()
0 0
1 1
1 0
1 2
1 1
0 1
0 0
1 2
0 2
0 2
1 0
1 2
0 1
0 1
1 2
[snip…]
См. в этой части документов, например , количество успешных тестовых случаев по умолчанию должно быть 100. Поэтому попытка сгенерировать все больше и больше данных, ограничивающихся только 6 случаями, быстро не удается найти один из этих 6 случаев.
Самый простой подход может быть просто ограничить количество примеров , необходимых для прохождения этого теста:
>>> from hypothesis import settings
>>> @settings(max_examples=30)
... @given(st.integers(0,1), st.integers(0,2))
... def test(x, y):
... print(x, y)
... assert True
...
>>> test()
0 0
1 1
1 0
0 2
1 2
0 1
0 1
1 1
1 0
1 1
0 1
1 2
1 1
0 0
0 2
0 2
0 0
1 2
1 0
0 1
1 0
1 0
0 1
1 2
1 1
0 2
0 0
1 2
0 0
0 2
Другой подход, учитывая небольшое количество тестовых случаев, состоит в том, чтобы явным образом описать их все, используя @example
и попросить hypothesis
запустить только те явные примеры :
>>> from hypothesis import given, example, settings, Phase, strategies as st
>>> @settings(phases=(Phase.explicit,))
... @given(x=st.integers(), y=st.integers())
... @example(x=0, y=0)
... @example(x=0, y=1)
... @example(x=0, y=2)
... @example(x=1, y=0)
... @example(x=1, y=1)
... @example(x=1, y=2)
... def test(x, y):
... print(x, y)
... assert True
...
>>> test()
0 0
0 1
0 2
1 0
1 1
1 2
Также обратите внимание, что st.just(0) | st.just(1)
эквивалентно st.one_of(st.just(0), st.just(1))
, поэтому выберите подход и придерживайтесь его, но не смешивайте их.