如何为下面的JSON编写mockMVC测试,该JSON具有String和Array的组合。
{
"id":1,
"firstName":"NPA",
"lastName":"TAS",
"mobile":"123454321",
"email":"ABCD@GMAIL.COM",
"accounts":[
{
"id":1,
"balance":"$1000",
"custid":"1",
"accNbr":"12345"
}
]
}
我的代码:
@Test
public void testJson() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(get("/acc/1")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.accounts.id", Matchers.is(1)))
.andExpect(jsonPath("$.accounts.balance", Matchers.is("$1000")))
.andExpect(jsonPath("$.accounts.accNbr", Matchers.is("12345")))
.andExpect(jsonPath("$.accounts.custid", Matchers.is("1")))
.andExpect(jsonPath("$.*", Matchers.hasSize(4)));
}
我有个例外
JSON路径“$.accounts.id”处无值,异常:
应在路径$中找到属性为['accounts']的对象,但找到'net'。米尼德夫。json。杰索纳雷'。根据JsonProvider:'com,这不是json对象。乱穿马路。jsonpath。spi。json。JsonSmartJsonProvider'。
但是,如果我尝试使用$。帐户[0]。我有例外吗
JSON路径“$.accounts[0].id”处没有值,异常:
应在路径$中找到属性为['accounts']的对象,但找到'net'。米尼德夫。json。杰索纳雷'。根据JsonProvider:'com,这不是json对象。乱穿马路。jsonpath。spi。json。JsonSmartJsonProvider'。
正如@glytching和我提到的,有一个数组,它应该与$一起工作。帐户[0]。id
。
如果您仍然遇到问题,我将尝试在您的控制台上打印结果:
MvcResult result = mockMvc.perform(MockMvcRequestBuilders
.get("/acc/1").accept(MediaType.APPLICATION_JSON)).andReturn();
String content = result.getResponse().getContentAsString();
accounts
属性是一个数组,因此:$。账户id
必须使用索引器,例如:$。帐户[0]。id
。
从文档中:
[<number> (, <number>)] Array index or indexes
如果您不确定要使用哪个索引,那么您可以过滤JSON并在过滤后的帐户子文档上断言。例如:
1000美元
================================================================================================================id:返回
1
文档中有更多详细信息,您可以使用JsonPath评估器来处理这个问题。
我试图尽可能地保持代码清晰,所以我决定创建许多测试类,包括测试项,例如: 我的测试用例是: 我在堆栈跟踪中看到了my MockHttpServletResponse,在那里我可以找到“TaskEstablishedDate”:“2020-12-10t09:12:45.000+00:00”。此外,如果我复制整个响应并将其传递到https://jsonformatter.curiousconcept.
提示/否这里的任何解决方案都是解决我: 请帮帮我
我以前写过一个测试,它成功了,但现在我得到了一个断言错误:JSON路径没有值。
在实现了库之后,我必须修改我的并添加 这些变化是否与错误有关?
问题内容: JSON Path Expression应该是什么来获取beneficiary_ids 问题答案: 您所需的JSON路径表达式将如下所示: