python - 假设检验:如何从另一个策略中采样值?
问题描述
我必须使用示例数据测试一些功能:
data = [
[[10, 20, 30], 10],
[[20, 30], 20],
[[40], 30],
]
其中每行中的第一个元素列表包含 N=(1 到 5) 个随机整数元素,这些元素通过以下方式生成:
st.lists(
st.integers(min_value=10),
min_size=2,
max_size=5,
unique=True)
每行中的第二个元素包含来自所有生成列表的所有唯一整数集合中的随机样本。
所以对于我的data
例子:
- 列表包含来自唯一集合 (10,20,30,40) 的值;
- 每行中的第二个元素包含来自该集合的随机整数样本;
如何使用假设测试框架实施这样的策略?
这个不起作用:
int_list = st.integers(min_value=10)
@given(st.lists(
elements=st.tuples(
int_list,
st.sampled_from(int_list))
解决方案
查看有关调整策略的文档- 您可以使用 来执行此操作.flatmap(...)
,但使用 定义自定义策略@composite
可能更简单。
# With flatmap
elem_strat = lists(
integers(), min_size=2, max_size=5, unique=True
).flatmap(
lambda xs: tuples(just(xs), sampled_from(xs)).map(list)
)
# With @composite
@composite
def elem_strat_func(draw):
xs = draw(lists(
integers(), min_size=2, max_size=5, unique=True
)
an_int = draw(sampled_from(xs))
return [xs, an_int]
elem_strat = elem_strat_func()
# then use either as
@given(lists(elem_strat))
def test_something(xs): ...
推荐阅读
- swift - 尝试在 ForEach 循环中设置导航链接项目详细信息视图
- python - 有没有一种有效的方法对标记的相似数据点进行聚类?
- azure-cosmosdb - CosmosDB RequestUnit 消耗不匹配
- c# - 如何通过 FieldInfo c# 创建数组
- sql - SQL 按指定列中的重复项删除行
- c++ - xsdcxx 如何抑制某些类型的解析?
- linkedin-api - 是否可以将 Markdown 页面转换为linkedin 文章?
- flutter - 在行内用 GestureDetector 包裹的展开不再展开
- android - import android.widget.Button 未使用的导入指令
- git - 测试 GIT 功能分支