我正在尝试使用假设来生成具有复杂格式的文本策略。我不确定如何建立这种数据结构。
我尝试将各种元素构建为复合材料,然后将它们用作其他复合材料的策略。然而,列表策略中的元素参数需要一个 SearchStrategy 而不是我希望的复合。浏览文档我无法确定构建、映射或平面图在这种情况下是否有帮助。
我的(简化的)尝试如下。
@st.composite
def composite_coords(draw):
lat = draw(st.decimals(min_value=-10, max_value=-1, allow_nan=False, places=16))
long = draw(st.decimals(min_value=50, max_value=90, allow_nan=False, places=16))
return [float(long), float(lat)]
@st.composite
def composite_polygon_coords(draw):
polygon_coords = draw(st.lists(
elements=composite_coords, min_size=3
))
return polygon_coords.append(polygon_coords[0])
@st.composite
def composite_polygons(draw):
polygons = draw(st.lists(
elements=composite_polygon_coords, min_size=1
))
polygon = {
'type': 'Polygon',
'coordinates': polygons
}
return poly.dumps(polygon)
@given(composite_polygons())
def test_valid_polygon(polygon):
result = validate(polygon)
assert result == polygon