我有一个类似这样的json响应:
private void dataGridView1_DataBindingComplete(object sender DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToInt32(row.Cells["balaceAmount"].Value) == 0)
{
row.DefaultCellStyle.BackColor = Color.Yellow;
}
else
{
row.DefaultCellStyle.BackColor = Color.White;
}
}
}
我想检查someArray数组是否具有名称为“ someProperty”且值为“ someValue”的对象,但如果它具有具有相同属性但值不同的另一个对象,则不要失败。
有可能吗?在此之前,我一直使用静态索引,因为该数组中只有一个元素。
答案 0 :(得分:2)
这是使用JsonPath的解决方案:
List<String> values = RestAssured.when().get("/api")
.then().extract().jsonPath()
.getList("someArray.someProperty");
Assert.assertTrue(values.contains("someValue"));
将适用于以下响应JSON:
{
"someArray":[
{
"someProperty":"someValue"
},
{
"someProperty":"someOtherValue"
}
]
}
答案 1 :(得分:0)
假设您使用的是Java 8或更高版本,则应使用Arrays.stream(someArray)
,然后使用filter
方法来选择所需的元素。
我没有使用过REST保证,但是根据他们的文档,看来您应该可以在下面使用类似的东西
@Test public void
lotto_resource_returns_200_with_expected_id_and_winners() {
when().
get("/lotto/{id}", 5).
then().
statusCode(200).
body("someArray", hasItems(hasEntry("someProperty", "someValue")));
}
如果您可以在使用hasEntry
之前放一些反序列化逻辑将对象转换为映射,则此方法有效
另一种解决方案是使用findAll
body("someArray.findAll {o -> o.someProperty == 'someValue'}.size()", greaterThan(0))