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

时间:2019-04-15 13:46:39

标签: java cucumber

我有这样的API响应:

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

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

有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

这不是一个黄瓜问题。而是有关如何将某些json转换为可以验证正确的内容的问题。

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

首先询问您的开发人员他们使用什么库来处理json。如果您的项目没有处理json的首选方法,则可以向

添加测试依赖项
<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20180813</version>
</dependency>

并将其用于将json字符串解析为可以验证的对象。

可能值得注意的是您的示例无效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}";
    }
}

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