2017-04-26 3 views
0
nicht

Ich habe die folgende Behauptung in meinen JUnit-Tests für meinen Frühling basierend Ruhe-ControllerFrühling JUnit Test - JSONPath für Integer Passenden

.andExpect(jsonPath("$..terminationPoint.downstreamSpeedKbps", is(Integer.valueOf(500)))); 

diese Behauptung gegen die folgende Nutzlast gemacht wird:

{ 
    "result":[ 
     { 
     "terminationPoint":{ 
      "downstreamSpeedKbps":500 
     } 
     } 
    ] 
} 

und ich erhalte die folgende Fehlermeldung, wenn die Behauptung lautet:

java.lang.AssertionError: JSON path "$..terminationPoint.downstreamSpeedKbps" 
Expected: is <500> but: was <[500]> 

keine Idee wh Bevor diese eckigen Klammern herkommen oder was bedeuten sie?

Antwort

0

$.. wird eine tiefe Scan und Rückkehr durchführen Ein Array aller Werte ist Ihr JSON. Verwendung spezifischer Index statt:

.andExpect(jsonPath("$.result[0].terminationPoint.downstreamSpeedKbps", 
        is(Integer.valueOf(500)))); 

Here Sie mit dem jsonpath spielen und prüfen, ob die Ergebnisse

+0

Die erste Lösung funktioniert, die zweite gibt den folgenden Fehler zurück: 'Erwartet: ist [<500>] aber: war <[500]>' –

+1

@SamanthaCatania Sie haben Recht. Die zweite Lösung wurde entfernt. Solange Sie das json-Array als Ergebnis haben, ist es besser, den Index des Ergebnisses zu verwenden –

0

Das Problem ist: Ausdruck $.. gibt Ihnen einen Array zurück .. Sie können es auch aus der Meldung Fehler erkennen [], können Sie dies tun:

$..terminationPoint.downstreamSpeedKbps[0]

+0

Dieses ein leeres Array und die Ergebnisse in der folgenden Fehler zurückgibt: 'Erwartet: ist <500> aber: war <[]>' –