gpt4 book ai didi

python - 我应该实例化多个测试使用的假设策略吗?

转载 作者:行者123 更新时间:2023-12-01 03:29:47 25 4
gpt4 key购买 nike

内置的假设策略是通过函数提供的(例如,integers 是一个创建策略的函数,而不是实际的策略)。这对我来说表明策略对象具有内部状态。

@given(integers())
def test_foo(n):
assert n > 0
@given(integers())
def test_bar(n):
assert n < 100

在上面的两个虚假测试中,每个测试都会获取不同的策略对象(来自整数的不同调用。如果我然后像这样创建自己的策略:

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 的方式。在某些情况下这样做(请参阅NodeStrategyNodeSet的定义)。我是否应该通过将策略组合包装在如下函数中来避免这种情况:

 positive_integers = lambda: integers().filter(lambda x: x > 0)
#...
@given(positive_integers())

最佳答案

我看了一下source code ,看起来您应该可以在测试之间共享相同的策略对象。看起来您调用了一个函数,因此您可以为策略传入不同的参数。

我认为这意味着你可以这样做:

@given(integers(min_value=0))
def test_foo(n):
assert n > 0
@given(integers(min_value=0))
def test_bar(n):
assert n < 100

或者这个:

positive_integers = integers(min_value=0)

@given(positive_integers)
def test_foo(n):
assert n > 0
@given(positive_integers)
def test_bar(n):
assert n < 100

我看不到任何超出范围边界的状态证据。事实上,BoundedIntStrategy似乎获取了作为参数传入的搜索数据:

def do_draw(self, data):
return d.integer_range(data, self.start, self.end)

但是,我只玩过一点假设,所以我肯定是错的。

关于python - 我应该实例化多个测试使用的假设策略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41058158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com