在 pytest 和 Hypothesis 中结合单元和基于 属性 的测试
Combining unit and property-based tests in pytest and Hypothesis
我需要 运行 在 Python 中混合使用单元测试和基于 属性 的测试。我当前的测试代码 运行 将它们分开,因此重复了一些代码:
@pytest.mark.parametrize("values", list_of_values)
def test_my_function(a_value):
call_test(a_value)
@given(st.arbitrary_values())
def test_hypothesis_my_function(a_value):
call_test(a_value)
上面有代码重复:test_my_function
和test_hypothesis_my_function
是一样的,只是分别由单位和基于属性的基础设施触发。
我希望消除上面的代码重复以获得如下内容:
@pytest.mark.parametrize("values", list_of_values)
@given(st.arbitrary_values())
def test_my_function(a_value):
call_test(a_value)
能达到这个效果吗?提前致谢。
如果您的参数列表是源代码中的文字,您可以 translate that to a sequence of @example()
decorators:
@given(text())
@example("Hello world")
@example(x="Some very long string")
def test_some_code(x):
pass
如果它是一个显式列表,您可以编写一个辅助函数来为您应用它们:
def parametrize(list_of_args):
def inner(f):
for a in list_of_kwargs:
f = hypothesis.example(*a)(f)
return f
return inner
@parametrize(list_of_args_tuples)
@given(text())
def test_some_code(x):
pass
我需要 运行 在 Python 中混合使用单元测试和基于 属性 的测试。我当前的测试代码 运行 将它们分开,因此重复了一些代码:
@pytest.mark.parametrize("values", list_of_values)
def test_my_function(a_value):
call_test(a_value)
@given(st.arbitrary_values())
def test_hypothesis_my_function(a_value):
call_test(a_value)
上面有代码重复:test_my_function
和test_hypothesis_my_function
是一样的,只是分别由单位和基于属性的基础设施触发。
我希望消除上面的代码重复以获得如下内容:
@pytest.mark.parametrize("values", list_of_values)
@given(st.arbitrary_values())
def test_my_function(a_value):
call_test(a_value)
能达到这个效果吗?提前致谢。
如果您的参数列表是源代码中的文字,您可以 translate that to a sequence of @example()
decorators:
@given(text())
@example("Hello world")
@example(x="Some very long string")
def test_some_code(x):
pass
如果它是一个显式列表,您可以编写一个辅助函数来为您应用它们:
def parametrize(list_of_args):
def inner(f):
for a in list_of_kwargs:
f = hypothesis.example(*a)(f)
return f
return inner
@parametrize(list_of_args_tuples)
@given(text())
def test_some_code(x):
pass