私はspring-test
統合テストの一環としてHamcrest CoreMatcher
クラスを使用しています。私のJSONは次のようになります。JSONのdouble値を比較するHamcrest matcher
{"data":[{"distanceInMiles":4,"id":"f97236ba-f4ef-4...
そして、私の統合テストは、次のようになります。
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)))
しかし、アサーションは失敗します。
java.lang.AssertionError: JSON path "$.data[0].distanceInMiles"
Expected: is <4.0>
but: was <4>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
私は別のIsCloseTo
マッチャがここにありますことを知っている:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/IsCloseTo.html 、それをそう使用する:
.andExpect(jsonPath("$.data[0].distanceInMiles", closeTo(miles, 0)))
奇妙なエラーでの
結果:
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)
私はエラーのいくつかの種類が含ますることを避けるために期待していた - 私は返された値が正確に4
になりたいは、私がどれだけ多くの末尾を気にしませんゼロが含まれます。
をJSONレスポンスのため、同じ変数を2回入力しないように再利用したいと考えていました。デモのためにコードブロックを更新します。 –
ところでJava 8を使用していますか? – Tunaki
はい、私はJava 8を使用しています。 –