5

我已经使用hypothesis了一段时间了。我想知道如何重用@given parts.

我有一些像 20 行,我将整个@given部分复制到几个测试用例之上。

一个简单的测试示例

@given(
    some_dict=st.fixed_dictionaries(
        {
            "test1": st.just("name"),
            "test2": st.integers()
            }
        )
    )
def test_that uses_some_dict_to_initialize_object_im_testing(some_dict):
    pass

绕过重用@given块的最佳方法是什么?

4

2 回答 2

4

创建自己的装饰器:

def fixed_given(func):
    return given(
        some_dict=st.fixed_dictionaries(
            {
                "test1": st.just("name"),
                "test2": st.integers()
            }
        )
    )(func)


@fixed_given
def test_that_uses_some_dict_to_initialize_object_in_testing(some_dict):
    pass
于 2019-09-03T10:32:08.813 回答
4

另一种方法是将策略存储为可重用的全局变量,例如


a_strategy = st.fixed_dictionaries({ "test1": st.just("name"), "test2": st.integers()})

@given(some_dict=a_strategy)
def test_uses_some_dict_to_initialize_object_im_testing(some_dict):
    pass
@given(some_dict=a_strategy, value=st.integers())
def test_other(some_dict, value):
    ...

等等......,策略被设计为相互组合的对象,将它们分成子策略并因此重用它们并没有错。

时区示例显示了该模式,它定义了一个策略aware_datetimes并在多个测试中使用该策略。

于 2020-06-02T11:20:36.953 回答