Espressione ristabilita e GPak per attributo non coerente
-
21-12-2019 - |
Domanda
Utilizziamo il quadro di riserva per fare alcuni test di unità / integrazione in Java.
La risposta XML da un servizio di riposo è simile a questo:
<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns="urn:service:com:namespace:item/1"
returned="3" found="3">
<ItemRef object="urn:svc:com:car:item:123456" type="door">door-123456.pdf</ItemRef>
<ItemRef object="urn:svc:com:car:item:983425" type="mirror">mirror-43562577.pdf</ItemRef>
<ItemRef object="urn:svc:com:car:item:983425" type="wheel" >door-94584854.pdf</ItemRef>
</Items>
.
Nel mio test sono interessato a controllare il numero di elementi restituiti leggendo l'attributo returned
come questo
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.when()
.get(myurl)
.
E funziona bene
Ora voglio anche controllare se l'urna nell'XMLNS è corretto con la stessa logica:
givenOK()
.expect()
.body("Items.@returned", equalTo("3")) // this is a string
.body("Items.@xmlns", equalTo("urn:service:com:namespace:item/1"))
.when()
.get(myurl)
.
Ma quando il mio test funziona, l'espressione Items.@xmlns
sembra non restituire il valore dell'attributo ma vuoto: []
Qualche idea del perché questo non funziona?
Soluzione
Potrebbe essere che l'attributo "XMLNS" sia considerato specialmente perché indica uno spazio dei nomi?
Un possibile lavoro sarebbe dichiarare lo spazio dei nomi nell'XMLConfig e verificare qualcosa nel corpo.
given().
config(RestAssured.config().xmlConfig(XMLConfig.xmlConfig().declareNamespace("ns", "urn:service:com:namespace:item/1"))).
when().
get(myUrl).
then().
body("'ns:ItemRef'[0]", equalTo("door-123456.pdf"));
.
E un altro esempio con più nodi e attributi (percorso esplicito):
given()
.config(
RestAssured.config()
.xmlConfig(XmlConfig.xmlConfig()
.declareNamespace("ns", "urn:service:com:namespace:item/1"))).
when()
.get(myUrl)
.then()
.body("'ns:RootNode'.'ns:Level1'.'ns:Level2'[0].'@ns:id'", equalTo("AN-ID-123"));
.