Я пытаюсь использовать гипотезу для генерации текстовой стратегии со сложным форматом. Я не уверен, как создать такую структуру данных.
Я пытался создать различные элементы в виде композитов, чтобы затем использовать их в качестве стратегий для других композитов. Однако аргумент elements в стратегии списков требует 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