内置假设策略是通过函数提供的(例如,不是实际策略,而是integers
创建策略的函数)。这向我表明,策略对象具有内部状态。
@given(integers())
def test_foo(n):
assert n > 0
@given(integers())
def test_bar(n):
assert n < 100
在上面的两个虚假测试中,每个测试都会获得一个不同的策略对象(来自不同的调用integers
。如果我创建自己的策略,如下所示:
positive_integers = integers().filter(lambda x: x > 0)
...然后将其用于相同的测试:
@given(positive_integers)
def test_foo(n):
assert n > 0
@given(positive_integers)
def test_bar(n):
assert n < 100
它们共享相同的策略对象。在我看来,这听起来可能是错误的,但在某些情况下,文档中的示例就是NodeStrategy
这样做的(参见和的定义NodeSet
)。我是否应该通过将策略组合包装在如下函数中来避免这种情况:
positive_integers = lambda: integers().filter(lambda x: x > 0)
#...
@given(positive_integers())