-1

在定义策略时,是否可以参考其他策略?

@given(maximum=strategies.floats(min_value=0),
       actual=strategies.floats(max_value=maximum))
def foo(maximum, actual):
    pass

这抛出NameError: 'maximum' not defined'

编辑:

一种解决方法(或者可能解决方法)是使用假设的assume功能。就我而言,它看起来像:

@given(maximum=strategies.floats(min_value=0),
       actual=strategies.floats(min_value=0))
def foo(maximum, actual):
    assume(actual <= maximum)
    pass
4

1 回答 1

1

您的选择可以概括为“通过拒绝一些示例来实现”(使用.filter()orassume()或“通过构造来实现”。

后者通常更有效,尽管它可能需要更多代码。如果您确实想尝试通过构造来满足您的约束,您需要编写一个@st.composite策略,将多个参数作为元组提供;或者一直到st.data()策略并在测试中交互绘制。

或者......在像这样的简单情况下,您可以将其放在if actual > maximum: actual, maximum = maximum, actual测试函数的顶部。

于 2019-05-27T02:36:50.220 回答