我正在为我的 REST API 控制器编写测试,我需要检查返回的 JSON
对象中的 UUID
值,请参阅此测试方法:
@Test
public void findById() throws Exception {
final String uuidString = "6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1";
final UUID id = UUID.fromString(uuidString);
final Envelope envelope = createEnvelope(id);
when(envelopeService.findOne(id, currentUser)).thenReturn(Optional.of(envelope));
when(utilService.getLoggedInUser()).thenReturn(currentUser);
mockMvc.perform(get("/api/envelopes/{id}", uuidString)).
andExpect(status().isOk()).andExpect(content().contentType(Util.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$..id", is(uuidString)));
verify(envelopeService, times(1)).findOne(id, currentUser);
//verifyNoMoreInteractions(envelopeService);
}
但是测试产生了这个错误:
Expected: is "6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1"
but: was <["6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1"]>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java:74)
at org.springframework.test.web.servlet.result.JsonPathResultMatchers$1.match(JsonPathResultMatchers.java:86)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
似乎ID6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1
被正确返回,但被序列化为不同的结构。
我的代码有什么问题?
原因是你的jsonpath声明是错误的
"6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1" <--- String
<["6c2b1c8a-3c29-4160-98b0-b8eaea7ea4d1"]> <--- Array
您不应该使用<code>$..id</code>,这会返回一个数组。在此处签出文档https://github.com/jayway/JsonPath
在我看来,jsonPath变量是一个对象数组,而不是单个字符串。
您应该使用$[0]
获取案例中的第一个也是唯一的元素,即UUID:
mockMvc.perform(get("/api/envelopes/{id}", uuidString)).
andExpect(status().isOk())
.andExpect(content().contentType(Util.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$[0]", is(uuidString)));
我是不是漏掉了什么?提前感谢!
问题内容: 如何通过所有多词搜索仅获取经过过滤的匹配结果。我有这个示例表,其中titleid是一个映射int字段,personid是一个关键字: 删除结果为: 使用这样的示例查询: 我得到以下结果: 也许这会有所帮助,我在sql中进行了查询并获得了预期的结果。我所做的是让查询给我与搜索到的参数数量匹配的titleid之和。这只是为了更多地自我解释,其思想是使用elasticsearch。 问题答案
我有一个接口,它提供了一个方法,返回一个,其中包含一个
问题内容: 做一个简单的测试时,我就在用Java编写正则表达式 但是在JavaScript中 这里发生了什么?我可以使我的Java regex模式“ q”的行为与JavaScript相同吗? 问题答案: 在JavaScript中,返回与使用的正则表达式匹配的子字符串。在Java中,检查整个字符串是否与正则表达式匹配。 如果要查找与正则表达式匹配的子字符串,请使用Pattern和Matcher类,例
我可以使用哪种匹配器? { test: /\.js$/, loader: 'babel-loader' } - Matches just .js { test: /\.(js|jsx)$/, loader: 'babel-loader' } - Matches both js and jsx Generally put it's just a JavaScript regex so standar
当我通过一个特定方面进行过滤时,该特定字段的方面在结果中被正确过滤,但其他方面的字段保持不变。解释这一点的最佳方法是使用查询和响应。 因此,如您所见,它返回所有方面,即使唯一的结果位于Eugene。它还返回的计数7。为什么它会返回所有这些额外的方面和错误的计数?下面是我的ruby映射。