代码之家  ›  专栏  ›  技术社区  ›  isADon

Harmcrest jsonPath错误失败,出现双

  •  0
  • isADon  · 技术社区  · 6 年前

    我有以下REST端点,它返回一个包含两个double的简单数据类

    @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))));
    

    测试总是失败

    JAVAlang.AssertionError:JSON路径“$.latitude”应为:is <-26.733229893125923> 但是:是<-26.733229893125923>

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

    如果我将双精度降低一,测试就会起作用。如果我使用 Matchers.closeTo(-26.733229893125923, 0.01)

    1 回复  |  直到 6 年前
        1
  •  3
  •   Sam Brannen    6 年前

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

    这实际上显示了它们的字符串表示(即调用 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))