Ich habe das folgende JSON-Schema, das ich validieren möchte, und Python-Komponententest.Können JSON-Ganzzahlattribute referenziert werden?
{
"properties": {
"traffic_parameters" {
"capacity": {
"oneOf": [
{
"max_percentage": {
"type": "integer",
"minimum" : 1,
"maximum" : 150
},
"min_percentage": {
"type": "integer",
"minimum" : 1,
"maximum" : {
"$ref": "#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum"
}
}
},
{
"percentage_range": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "integer"
}
}
}
]
}
}
}
}
Mit jsonschema ich bestätigen das ganze Schemadatei OK. Beim Schreiben von Unittests bekomme ich jedoch den folgenden Fehler;
capacity = {'oneOf': [{'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}}, {'percentage_range': {'type': 'array', 'minItems': 1, 'maxItems': 10, 'items': {'type': 'integer'}}}]}
-----------------------------------------
index0 = {'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}}
-----------------------------------------
min_percentage = {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}
E.........
======================================================================
ERROR: test_invalid_minimum__traffic_parameters__capacity__min_percentage (__main__.SchemaTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_test-variables_schema.py", line 160, in test_invalid_minimum__traffic_parameters__capacity__min_percentage
validate(0, min_percentage)
File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 540, in validate
cls.check_schema(schema)
File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 83, in check_schema
raise SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'} is not of type 'number'
Failed validating 'type' in schema['properties']['maximum']:
{'type': 'number'}
On instance['maximum']:
{'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}
FAILED (errors=1)
Mein Test sind Python Unit-Tests, die das Minimum und Maximum des Attributs testen. Das Maximum ist ein Verweis auf ein anderes direkt oben definiertes Attribut.
Der gezeigte Test testet das Minimum, aber es ist der maximale Wert, der fehlerhaft ist. Der Fehler wäre der gleiche, wenn ich das Maximum testen würde, es ist genau das, woran ich gearbeitet habe.
Ich habe versucht, den Typ als "Integer" für "Maximum" neu zu spezifizieren, aber der Fehler bleibt.
Wie kann ich diesen Fehler umgehen, ohne den Typ des Attributs zu ändern? Die Referenz ist wichtig, weil das Maximum dieses Attributs direkt mit dem Minimum des vorherigen Attributs in Beziehung stehen soll.
Gibt es auch eine andere (leichtere) Möglichkeit, diese Variablen in Unittests zu referenzieren?
Hier ist die Funktion
def test_invalid_minimum__traffic_parameters__capacity__min_percentage(self):
global test_schema
capacity = test_schema["traffic_parameters"]["capacity"]
print ("capacity = " + str(capacity))
print ("-----------------------------------------")
index0 = capacity["oneOf"][0]
print ("index0 = " + str(index0))
print ("-----------------------------------------")
min_percentage = index0["min_percentage"]
print ("min_percentage = " + str(min_percentage))
with self.assertRaises(ValidationError):
validate(0, min_percentage)
Dank.