如何验证列表中包含的属性

问题描述 投票:0回答:1

我有这样的API响应:

"Name": [
  {
    "abc": "xyz",
    "abc1": "xyz2"              
  },
  {
    "abc": "yzk",
    "abc1": "xyz21"
  },
  {
    "abc": "zxc",
    "abc1": "xyz211"
  }
]

我想验证NAME属性是否包含使用java提到的所有键值对

谁能解释一下?

java cucumber
1个回答
0
投票

这不是黄瓜问题。这是一个关于如何将一些json转换为可以验证正确的东西的问题。

我可以看到三到四个不同的apporaches,它们都涉及一个外部库,用于解析json并将其转换为可以使用常规断言框架断言的Java对象。

首先询问你的开发人员他们用什么库来处理json。如果您的项目没有处理json的首选方法,我会添加一个测试依赖项

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20180813</version>
</dependency>

并使用它将jsonstring解析为可以验证的对象。

值得注意的是,你的例子不是有效的json,因为它不是以{开头或以}结尾

修复此问题会得到如下所示的示例:

{"Name": [
  {
    "abc1": "xyz2",
    "abc": "xyz"
  },
  {
    "abc1": "xyz21",
    "abc": "yzk"
  },
  {
    "abc1": "xyz211",
    "abc": "zxc"
  }
]}

通过这个示例,我能够实现一个如下所示的示例:

package se.thinkcode;

import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class ParseJson {

    @Test
    public void verifyNameArray() {
        JSONObject jsonObject = new JSONObject(getSample());
        JSONArray array = jsonObject.getJSONArray("Name");

        assertThat(array.length()).isEqualTo(3);
    }

    private String getSample() {
        return "{\n" +
                "\"Name\": [\n" +
                "  {\n" +
                "    \"abc\": \"xyz\",\n" +
                "    \"abc1\": \"xyz2\"              \n" +
                "  },\n" +
                "  {\n" +
                "    \"abc\": \"yzk\",\n" +
                "    \"abc1\": \"xyz21\"\n" +
                "  },\n" +
                "  {\n" +
                "    \"abc\": \"zxc\",\n" +
                "    \"abc1\": \"xyz211\"\n" +
                "  }\n" +
                "]" +
                "\n}";
    }
}

您的任务是获取数组,检查数组中的每个元素,看它是否包含您需要的内容。

© www.soinside.com 2019 - 2024. All rights reserved.