用 hamcrest 处理数组,放心

Dealing arrays with hamcrest and rest assured

我不知道如何使用 hamcrest 创建代码来检查具有这些属性的数组中的数组。

(想象一下,因为它有多个不同数据的条目)

 {
        "mobilenum": "+6519829340",
        "firstname": "Allen",
        "lastname": "Edwards",
        "location": "Singapore"
    }

如果我使用这个:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")));

它 returns 它确实存在,但我如何才能更多地检查它找到的对象是否也具有相同的名字、姓氏和位置?

我也认为这是错误的:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")))
      .and()
 .body("smsentries.firstname", contains(equalTo("Allen"));

据我了解,如果数组包含的 mobilenum 等于提供的内容,并且数组包含名称 "Allen"

,它会搜索数组

我需要的是找到 mobilenum 等于“+6519829340”并且 firstname 等于 "Allen" 的数组。

你们知道怎么做吗?

What I needed to is to find the array having the mobilenum equal to "+6519829340" and having the firstname equalto "Allen".

您可以使用"find"方法:

.body("smsentries.find { it.mobilenum == '+6519829340' }.firstname", equalTo("Allen")
.body("smsentries.find { it.mobilenum == '+6519829340' }.lastname", equalTo("Edwards").

如您所见,在这两种情况下,您实际上是在复制路径表达式,因此为了改进这一点,我们可以使用 root paths:

.root("smsentries.find { it.mobilenum == '+6519829340' }").    
.body("firstname", equalTo("Allen")
.body("lastname", equalTo("Edwards").

您还可以参数化根路径:

.root("smsentries.find { it.mobilenum == '%s' }").    
.body("firstname", withArgs("+6519829340"), equalTo("Allen")
.body("lastname", withArgs("+6519829340"), equalTo("Edwards").
.body("firstname", withArgs("+12345678"), equalTo("John")
.body("lastname", withArgs("+12345678"), equalTo("Doe").