【发布时间】:2015-12-05 15:51:01
【问题描述】:
我正在使用 Hamcrest CoreMatcher 类作为 spring-test 集成测试的一部分。我的 JSON 看起来像:
{"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,我只是不在乎包含多少尾随零。 p>
【问题讨论】:
-
问题是
double值用于创建模型对象,然后将其作为 JSON 响应的一部分进行检查,因此我希望重用相同的变量以避免输入两次.我将更新我的代码块以进行演示。 -
顺便说一句,您使用的是 Java 8 吗?
-
是的,我使用的是 Java 8。
标签: java json spring spring-test hamcrest