【发布时间】:2017-04-24 19:10:14
【问题描述】:
内置假设策略是通过函数提供的(例如,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
它们共享相同的策略对象。这在我看来可能是错误的,但在某些情况下,examples in the docs 就是这样做的(参见NodeStrategy 和NodeSet 的定义)。我是否应该通过将策略组合包装在如下函数中来避免这种情况:
positive_integers = lambda: integers().filter(lambda x: x > 0)
#...
@given(positive_integers())
【问题讨论】:
标签: python unit-testing hypothesis-test