在我的项目中,我使用Hypothesis
来测试一个函数。
正在测试的函数接受一个名为stop
的强制参数和两个分别调用start
和step
的可选参数。
如果参数step
为零,则测试中的代码应触发异常。
这是我的测试功能
@given(start=st.integers(min_value=-1000, max_value=1000),
stop=st.integers(min_value=-1000, max_value=1000),
step=st.integers(min_value=-1000, max_value=1000))
@settings(settings(verbosity=Verbosity.verbose))
def test_XXX_for_integer(start, stop, step):
if step == 0:
with raises(ValueError) as excinfo:
_ = myrange3(start, stop, step)
assert 'arg 3 must not be zero' in str(excinfo.value)
else:
output = <some code>
expected = <some output>
assert output == expected
我的问题:我还想模拟start
和step
是可选的这一事实,因此这些参数中的一个或两个都设置为None
。如果不为代码的每个变体重新创建专用测试函数,我该怎么做?
答案 0 :(得分:1)
您可以像加入套装一样加入策略。例如:
st.integers
在测试中,您可以st.none
加入st_input = st.integers(min_value=-1000, max_value=1000)
st_input_optional = st_input | st.none()
@given(start=st_input_optional, stop=st_input, step=st_input_optional)
def test_XXX_for_integer(start, stop, step):
assert myrange3(stop, start=start, step=step)
:
UDID