sto usando le classi Hamcrest CoreMatcher
come parte di spring-test
test di integrazione. Il mio JSON assomiglia:Hamcrest matcher confrontando valore doppio da JSON
{"data":[{"distanceInMiles":4,"id":"f97236ba-f4ef-4...
E il mio test di integrazione appare come:
double miles = 4.0
Activity a = new BasicActivity(miles);
this.activityManager.add(a); // A mock activity manager (in-memory)
...
this.mockMvc.perform(get("/").accept("application/json"))
.andExpect(jsonPath("$.data[0].distanceInMiles", is(miles)))
Tuttavia, l'affermazione fallisce:
java.lang.AssertionError: JSON path "$.data[0].distanceInMiles"
Expected: is <4.0>
but: was <4>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
So che c'è una parte IsCloseTo
matcher qui: http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/IsCloseTo.html , ma il suo utilizzo in questo modo:
.andExpect(jsonPath("$.data[0].distanceInMiles", closeTo(miles, 0)))
produce un errore strano:
java.lang.AssertionError: JSON path "$.data[0].distanceInMiles"
Expected: a numeric value within <0.0> of <4.0>
but: was a java.lang.Integer (<4>)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
Speravo di evitare di dover includere qualche tipo di errore - io voglio il valore restituito per essere esattamente 4
, solo che non mi importa quanti finale gli zeri sono inclusi.
Il problema è che il valore 'double' viene utilizzato per creare l'oggetto del modello che viene poi controllato per come parte di la risposta JSON, quindi speravo di riutilizzare la stessa variabile per evitare di scriverla due volte. Aggiornerò il mio codice per dimostrarlo. –
Stai utilizzando Java 8 a proposito? – Tunaki
Sì, sto usando Java 8. –