python 带可选参数的假设检验

python Hypothesis test with optional parameter

在我的项目中,我使用 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。如果不为代码的每个变体重新创建专用测试函数,我该如何做到这一点?

您可以像加入集合一样加入策略。示例:

strategy_bools_or_ints = st.booleans() | st.integers()

在测试中,您可以加入 st.integersst.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)