这似乎与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))
选择一种方法并坚持下去,但不要混合使用它们。