我使用Hamcrest CoreMatcher
类作为spring-test
集成测试的一部分。我的JSON的样子:Hamcrest matcher比较来自JSON的double值
{"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
,我不在乎有多少尾随包括零。
的问题是,'double'值用于创建模型对象,然后被检查的一部分JSON响应,所以我希望能重复使用相同的变量来避免输入两次。我会更新我的代码块来演示。 –
您是否正在使用Java 8? – Tunaki
是的,我正在使用Java 8. –