Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带可选参数的python假设检验_Python_Python 3.x_Python Hypothesis - Fatal编程技术网

带可选参数的python假设检验

带可选参数的python假设检验,python,python-3.x,python-hypothesis,Python,Python 3.x,Python Hypothesis,在我的项目中,我使用假设测试函数。 正在测试的函数接受一个名为stop的强制参数和两个分别名为start和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,

在我的项目中,我使用
假设
测试函数。 正在测试的函数接受一个名为
stop
的强制参数和两个分别名为
start
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
@给定(开始=st.整数(最小值=-1000,最大值=1000),
停止=st.整数(最小值=-1000,最大值=1000),
步长=标准整数(最小值=-1000,最大值=1000))
@设置(设置(verbosity=verbosity.verbose))
def test_XXX_用于_整数(开始、停止、步骤):
如果步骤==0:
将提升(ValueError)作为excinfo:
_=myrange3(开始、停止、步骤)
str(exinfo.value)中的断言“arg 3不能为零”
其他:
输出=
预期=
断言输出==预期值

我的问题:我还想模拟一个事实,即
start
step
是可选的,因此这些参数中的一个或两个都设置为
None
。在不为代码的每个变体重新创建专用测试函数的情况下,如何才能做到这一点?

您可以以连接集合的方式连接策略。例如:

strategy_bools_or_ints = st.booleans() | st.integers()
在测试中,您可以将
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)