我有以下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)
答案 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))