我现在正在研究放心框架。
使用一些API,我得到以下(部分)JSON响应:
{
"results": [
{
"type": "AAAA"
},
{
"type": "A"
}
]
}
我正在尝试验证类型。到目前为止,我找到的唯一方法是使用gson将字符串转换为对象,然后断言:
@Given("^test2$")
public void test2$() {
RestAssured.baseURI = BASE_URI;
String response =
given()
.param(KEY_KEY, API_KEY)
.param(URL_KEY, URL_TO_CHECK)
.when()
.get(RESOURCE)
.asString();
System.out.println(response);
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
Gson gson = builder.create();
WhtResponse whtResponse = gson.fromJson(response, WhtResponse.class);
assertTrue(whtResponse.getResults().size() == 2);
assertTrue(whtResponse.getResults().get(0).getType().equals("AAAA"));
assertTrue(whtResponse.getResults().get(1).getType().equals("A"));
}
请忽略一种测试方法中有几个断言。我知道这不是最佳实践,但我现在只是“玩”来学习材料。
有没有更好、更短、更流畅的方法来测试这两个值?也许直接使用放心,而不使用Gson?
谢谢!
可能有几种方法,但我想介绍一种特定的方法,仅使用RestAsared
。
首先,您可以创建Java类来表示给定的JSON。您总是可以扩展它。
创建一个类ResultsObject(名称无关紧要)
public class ResultsObject {
public List<TypeObject> results;
}
我们声明重新发行的必须寻找JSON对象的JSON数组。这些对象中的每一个都被解析为类型对象(这个名称也无关紧要)。重要的是结果变量名。它匹配JSON中的结果。
因此,现在我们必须创建类来表示每个JSON对象。
public class TypeObject {
public String type;
}
同样,类名并不重要,重要的是type
变量名。就像在JSON中一样。
现在,只需一行代码,我们就可以将JSON(从响应
或String
)解析为我们创建的类,如下所示:
结果对象结果=response.json路径(). get("$", ResultObject.class);
进一步的工作需要创建断言。
MatcherAssert.assertThat(types, Matchers.hasItems("AAAA", "A")); //you can use static imports if you'd like.
断言来自Hamcrest,该断言已包含在重新假设中。它将字符串数组与我们选择的字符串数组相匹配。
您可以注意到,类型尚未初始化。我们需要一个字符串数组,但它是一个类型对象数组。我们可以简单地使用如下方式转换它:
List<String> types = resultsObject.results.stream().map(x -> x.type).collect(Collectors.toList());
就这样。
但是,如果出现这样的异常,则无法反序列化对象,因为在类路径中找不到JSON反序列化器。请将Jackson(Databind)或Gson放在类路径中
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
我已经测试了该解决方案。它还为您提供了处理数据方式的灵活性,如您所见,我只使用了1个断言来比较JSON中的所有类型
。
希望有帮助!
除了把它们全部输入外,还有没有更好的方法在字符串中列出它们?
除了把它们全部输入外,还有没有更好的方法在字符串中列出它们?
假设我有一个用户模式/模型,用户有一个朋友列表。Mongoose希望您将好友列表(外键/ObjectID类型)存储为数组,对吗?这意味着如果我想通过ID找到我的朋友,Mongoose将搜索数组,直到找到具有我想要的ID的朋友的第一个实例。那似乎真的是时间低效,不是吗?有更好的办法吗?
问题内容: 是否有一个很好的方法来Map 获取和忽略案件? 问题答案: TreeMap扩展了Map并支持自定义比较器。 字符串提供默认的不区分大小写的比较器。 所以: 比较器不考虑区域设置。在其JavaDoc中阅读有关它的更多信息。
我做这个迭代是为了对DataFrame的每个值执行不同的函数: 作为xxx一个2列数据帧
我被要求为一个临时雇佣系统做一个顺序图,其中主要包括申请者、雇主和系统。按照我的用例和类图,我使用了我必须的信息,为我被分配为actor的申请者生成一个序列图。我的老师想出了以下的评语: 帧只能是alt、opt或Loop。在同一活动栏中不能有多个箭头。看起来申请人和雇主都是人。序列图是软件的,而不是人类的。左边的驱动程序方法没有方法名。软件“系统”只有一个参与者。你需要有许多参与者,每一个是一个班