python - 通过另一种策略引用一种策略
问题描述
在定义策略时,是否可以参考其他策略?
@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
解决方案
您的选择可以概括为“通过拒绝一些示例来实现”(使用.filter()
orassume()
或“通过构造来实现”。
后者通常更有效,尽管它可能需要更多代码。如果您确实想尝试通过构造来满足您的约束,您需要编写一个@st.composite
策略,将多个参数作为元组提供;或者一直到st.data()
策略并在测试中交互绘制。
或者......在像这样的简单情况下,您可以将其放在if actual > maximum: actual, maximum = maximum, actual
测试函数的顶部。
推荐阅读
- python - 过滤显示的 CONNECT https 请求
- docker - 获取用于网络上 docker 容器的 IP 地址
- liquibase-hibernate - 从我的项目代码访问 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd 时出现 HTTP 403
- sql - 如何在 SQL 查询中添加具有大量对象的约束?
- android - 在 android 中使用 cognito 凭证提供程序的 Aws mqtt 连接
- python - 类在 Django 和 python 中没有对象错误
- ios - 在收到粘贴板内容更改通知后,我收到了很多崩溃
- java - 在spring webservice响应中设置xml响应头
- qt - 通过单击 QML 中的文本部分来发出信号
- java - Java中的字符到二进制到十六进制和向后