python假设测试与可选参数

时间:2018-01-12 07:54:43

标签: python python-3.x python-hypothesis

在我的项目中,我使用Hypothesis来测试一个函数。 正在测试的函数接受一个名为stop的强制参数和两个分别调用startstep的可选参数。 如果参数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

我的问题:我还想模拟startstep是可选的这一事实,因此这些参数中的一个或两个都设置为None。如果不为代码的每个变体重新创建专用测试函数,我该怎么做?

1 个答案:

答案 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