2017-10-14 1 views
1

Ich bin mir nicht sicher, warum das Folgende nicht funktioniert.Assertion schlägt in groovy, obwohl die Ausgabe die gleichen sind

Ich vergleiche einfach eine Antwort mit einer Reihe von Werten. Die Antwort kommt von einem json wo vorderen Ende die Kosten wie folgt aussieht:

20, 25, 40, 50 

Aber wenn man es packen, es angezeigt wird, wie [[20.0000, 25.0000, 40.0000, 50.0000]]

Also habe ich die Antwort, wie so abgeflacht:

json.groups.options.cost.flatten() 

Diese Ausgänge:

[20.0000, 25.0000, 40.0000, 50.0000] 

Jetzt möchte ich die oben mit einigen ha vergleichen rdcodierte Werte. Also habe ich diese Variable:

def cost = [20, 25, 40, 50].collect { "${it}.0000" } 

Und diese Ausgänge:

[20.0000, 25.0000, 40.0000, 50.0000] 

Also, wenn ich sie behaupten beide zusammen, ich erwarte, dass sie arbeiten, aber sie tun es nicht.

assert cost == json.groups.options.cost.flatten() 

nun interessant, was ist, wenn ich haben die gleiche Behauptung aber Kosten wird wie im Folgenden beschrieben:

def cost = [20.0000, 25.0000, 40.0000, 50.0000] 

Die Behauptung geht. Wie kommt es, dass es nur funktioniert und wie kann ich es mit der .collect Methode auf die ursprüngliche Weise arbeiten?

Antwort

0

Es wird nicht bestätigt, weil Sie versuchen, List<GString> mit List<BigDecimal> zu vergleichen. Generell sollte man solche Listen über Dezimalstellen in den Vergleich, weil sich keine Sorgen machen:

assert [20, 25, 40, 50] == [20.0000, 25.0000, 40.0000, 50.0000] 

wo erste Liste ist List<Integer> und das zweite ist List<BigDecimal>.

können Sie prüfen, welche Art von Liste json.groups.options.cost.flatten() ist, und wenn dies nicht List<BigDecimal> ist, dass Sie es von

json.groups.options.cost.flatten().collect { new BigDecimal(it) } 

und dann mit [20, 25, 40, 50]

vergleichen einfach zu konvertieren
Verwandte Themen