Harmcrest jsonPath错误地失败了

时间:2018-05-06 15:51:57

标签: spring spring-test

我有以下REST端点,它返回一个带有两个双精度的简单数据类

@GetMapping("/test")
public LatLng test() {
    return new LatLng(-26.733229893125923, -26.733229893125923);
}

我的测试看起来像这样:

mockMvc.perform(
    get("/test")
    .andExpect(status().isOk())
    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
    .andExpect((jsonPath("$.latitude", is(-26.733229893125923))))
    .andExpect((jsonPath("$.longitude", is(-26.733229893125923))));

测试始终以

失败
  

java.lang.AssertionError:JSON路径" $。latitude"预期:是   < -26.733229893125923>        但是:是< -26.733229893125923>

堆栈跟踪正确地显示它们是相同的值,但由于某种原因测试仍然失败。

如果我将双精度降低一,则测试工作正常。如果我使用Matchers.closeTo(-26.733229893125923, 0.01)

,测试也会失败

1 个答案:

答案 0 :(得分:2)

  

堆栈跟踪正确地显示它们是相同的值,但由于某种原因测试仍然失败。

这实际上表明他们的字符串表示(即,在对象上调用toString()的结果)是相同的。它没有表明对象在.equals()语义方面是相同的。

因此,expected对象可能是Double;然而,actual对象可能是Float

如果是这种情况,以下情况可能会使您的测试通过。

.andExpect(jsonPath("$.latitude", is(-26.733229893125923f)))

如果您使用的是Spring 4.3.15或更高版本,您也应该能够使用以下内容。

.andExpect(jsonPath("$.latitude").value(is(-26.733229893125923), Double.class))