使用 Hamcrest 测试一个数组是否包含另一个数组中的元素

Bet*_*cha 5 testing hamcrest rest-assured

我实际上有两种类型的数据:

a = ["1", "2", "3", "3", "5"]
b = ["7", "2"]

given()
       .header("Content-Type", "application/json").
when()
       .post(this.url).
then()
       .statusCode(200)
       .contentType("application/json")
       .body(myPathToData, everyItem(haveOneOrMoreElementFrom(a)));
Run Code Online (Sandbox Code Playgroud)

我想使用 Hamcrest 测试在我放心请求后的身体反应中,b(收到的元素)是否包含 a 中的一个或多个元素(haveOneOrMoreElementFrom在我的示例中)。

是否也可以对我的身体反应产生作用?

解决方案:

我找到了一个可能的解决方案: everyItem(hasItem(isIn(a)))

Con*_*ine 3

我相信检查是否b包含至少一个元素的解决方案a

assertThat(b, hasItemInArray(isIn(a))); // for arrays

assertThat(b, hasItem(isIn(a))); // for collections
Run Code Online (Sandbox Code Playgroud)

如果放心的话,那就是

...

then()
       .body(pathToData, hasItem(isIn(a)));
Run Code Online (Sandbox Code Playgroud)

在 Hamcrest 2 中,org.hamcrest.Matchers::isIn方法已被弃用,因此建议使用is(in(a))in(a)代替。