当前位置: 首页 > 知识库问答 >
问题:

Restassured:我们如何使用Hemcrest匹配器,而不是Foreach循环,将Json数组中的每个元素与Java中的一个特定的相同值进行比较

羊舌胡非
2023-03-14

重申:我们如何使用Hemcrest Matchers,而不是Foreach循环,将Json数组中的每个元素与Java中的一个特定的相同值进行比较。

{
  "id": 52352,
  "name": "Great Apartments",
  "floorplans": [
    {
      "id": 5342622,
      "name": "THE STUDIO",
      "fpCustomAmenities": [
        {
          "displaySequence": 2,
          "amenityPartnerId": "gadasd",
          "display": true,
          "leased": true
        },
        {
          "displaySequence": 13,
          "amenityPartnerId": "sdfsfd",
          "display": true,
          "leased": true
        }
      ]
    },
    {
      "id": 4321020,
      "name": "THE First Bed",
      "fpCustomAmenities": [
        {
          "displaySequence": 4,
          "amenityPartnerId": "gadasd",
          "display": true,
          "leased": true
        },
        {
          "displaySequence": 15,
          "amenityPartnerId": "hsfdsdf",
          "display": true,
          "leased": true
        }
      ]
    }
  ]
}

我想比较一下json响应中所有级别的所有租用节点的 Leased=true...

我有工作代码…

List<List<Boolean>> displayedvaluesfpStandardAmenities =
        when().get(baseUrl + restUrl).
                then().statusCode(200).log().ifError().
                extract().body().jsonPath().getList("floorplans.fpCustomAmenities.display");

for (List<Boolean> displayedStandardList : displayedvaluesfpStandardAmenities) {
    for (Boolean isDisplayedTrue : displayedStandardList) {
        softAssert.assertTrue(isDisplayedTrue);
    }
}

但问题是,我需要使用Hemcrest匹配器或Restaussred匹配器的简单格式的代码,并尝试如下简单的方式,(这是行不通的)

when().get(baseUrl + restUrl).
then().assertThat().body("floorplans.fpCustomAmenities.display",equalTo("true"));

我得到的错误是

java.lang.AssertionError: 1 expectation failed.
JSON path floorplans.fpCustomAmenities.display doesn't match.
Expected: true
  Actual: <[[true, true], [true, true]]>

所以我需要的是json响应中所有的“显示”节点都需要与“真”进行比较,这样我的测试才能通过。

我有一个如上所述的替代解决方案,但我所需要的是使用匹配器的工作解决方案。

暂时还没有答案

 类似资料:
  • 早上好, 很抱歉,如果这已经被问到了,但我正在构建一个java项目。 它是一个程序,允许用户插入投注(例如体育比赛的预测结果),并在以后允许用户插入所述比赛的最终结果。 这是由2个LinkedHashMaps完成的。一个键值对用户和预测分数,一个键值对用户和最终分数。 两个 LinkedHashMap 中键的顺序将与它们从另一个带有用户名称的数组获取键输入的顺序相同。因此,每次都只设置预测的和确定

  • 我有一个枚举< code>Foo 下面我正在尝试检查我的枚举中是否包含字符串。 当我发送或for 时,这是有效的。当我发送<code>第一个</code>或<code>第二个</code>给<code>fooStr</code>时,如何使它工作?

  • 我不能更改数组,它在每个元素中存储一个线程,所以我宁愿尽可能简单地避免损坏线程的内容(线程是同步化的,并使用ReentrantLock--所以问题只是关于数组)。 我想让这个for循环变得简单: 让我把它当成一个循环数组。我想过使用mudolo操作来实现这一点,但这也不起作用。以下是我尝试的:

  • 问题内容: 我有一个foreach循环,我想看看循环中是否存在下一个元素,以便可以将当前元素与下一个元素进行比较。我怎样才能做到这一点?我已经阅读了有关当前和下一个功能的信息,但我不知道如何使用它们。 提前致谢 问题答案: 一种独特的方法是反转阵列 然后 循环。这同样适用于非数字索引数组: 如果您仍然对使用和功能感兴趣,可以这样做: #2可能是最好的解决方案。注意,比较数组中的最后两项后,将停止循