用 hamcrest 处理数组,放心

Fra*_*ala 1 hamcrest rest-assured

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

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

 {
        "mobilenum": "+6519829340",
        "firstname": "Allen",
        "lastname": "Edwards",
        "location": "Singapore"
    }
Run Code Online (Sandbox Code Playgroud)

如果我使用这个:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")));
Run Code Online (Sandbox Code Playgroud)

它返回它确实存在,但我如何进行更多检查以确保它找到的对象也具有相同的名字、姓氏和位置?

我也认为这是错误的:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")))
      .and()
 .body("smsentries.firstname", contains(equalTo("Allen"));
Run Code Online (Sandbox Code Playgroud)

据我所知,如果数组包含的 mobilenum 等于所提供的值并且数组包含名称“Allen”,则它会搜索数组

我需要的是找到 mobilenum 等于“+6519829340”且名字等于“Allen”的数组。

你们知道该怎么做吗?

Joh*_*han 5

我需要的是找到 mobilenum 等于“+6519829340”且名字等于“Allen”的数组。

您可以使用“查找”方法:

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

正如您所看到的,您本质上是在两种情况下复制路径表达式,因此为了改进这一点,我们可以使用根路径

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

您还可以参数化根路径:

.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").
Run Code Online (Sandbox Code Playgroud)