我有一个API,它返回一个将在UI中显示的JSON对象。对象中字段的顺序很重要,因为UI希望按该顺序显示字段。我想编写一个单元测试来确保对象中字段的顺序是正确的。我的API响应如下所示:
{
"data": {
"field1": "value1",
"field2": "value2"
}
}
使用spring boot的< code>MockMvc库,我想编写一个这样的表达式来验证字段是否按顺序返回:
.andExpect(jsonPath("$.data"), is("field1=value1, field2=value2")
显然,上述方法不起作用,但我不确定我应该使用哪种类型的Matcher
来尝试并验证字段是否正确。
我找不到比较字段顺序的Hamcrest匹配器,但编写自己的很容易。请注意,JSON路径表达式的结果将为您提供一个LinkedHashMap
,因此您所需要的只是一个Matcher,它接受一个LinkedHashMap
并将其与给定对象进行比较,按条目的顺序逐个条目。将映射转换为条目的List
并使用List
的equals
方法可以解决问题,因为List
会按顺序比较项目。
这是匹配器的样子:
private class OrderedMapMatcher extends BaseMatcher<Map<String, String>> {
private LinkedHashMap<String, String> expected;
public OrderedMapMatcher(LinkedHashMap<String, String> expected) {
this.expected = expected;
}
@Override
public boolean matches(Object o) {
if (!(o instanceof LinkedHashMap)) {
return false;
}
LinkedHashMap actual = (LinkedHashMap) o;
List<Map.Entry<String, String>> expectedList = new ArrayList<>(expected.entrySet());
List actualList = new ArrayList(actual.entrySet());
return expectedList.equals(actualList);
}
@Override
public void describeTo(Description description) {
description.appendText(expected.toString());
}
}
断言是这样的:
LinkedHashMap<String, String> expectedData = new LinkedHashMap<>();
expectedData.put("field1", "value1");
expectedData.put("field2", "value2");
// mockMvc ResultActions code would be here
.andExpect(jsonPath("$.data", new OrderedMapMatcher(expectedData)));
问题内容: 我是正则表达式新手,但我了解如何按顺序匹配正则表达式查询中的任何字符(例如[abc]将匹配a,b或c中的任何一个。此外,我相信“ abc”将完全匹配abc)。 但是,我该如何构造一个以任何顺序匹配所有字符abc的正则表达式查询?因此,例如,我希望它匹配“ cab”或“ bracket”。我使用Python作为脚本语言(不确定是否重要)。 问题答案: 在Python中,我不会为此目的使用
问题内容: 我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是: 我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码: 但是,无论我尝试什么,每次返回的结果都是一片空白。 问题答案: 首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使
问题内容: 我正在尝试创建一个匹配字符串的正则表达式,如果它连续有3个或多个重复字符(例如aaaaaa,testtttttt,otttttter)。 我尝试了以下方法: 连续 匹配 任意 3个字符,但不 连续的 字符…我在哪里出错? 问题答案: 您要的内容无法使用 真正的 正则表达式完成,您需要的是(不规则的)反向引用。尽管许多正则表达式引擎实现了它们,但Go使用的RE2却没有。RE2是一种快速的
问题内容: 什么正则表达式将匹配Java中的任何ASCII字符? 我已经尝试过: 但是发现它与我想要的很多东西都不匹配(例如空格,括号等)。我希望避免以如下格式显式列出所有127个ASCII字符: 问题答案: 我没用过但是我用过
问题内容: 有没有一种方法可以使我按照WHERE命令中要求的顺序使mysql从成员数据库返回结果? 目前,无论我做什么,它将返回MemberID ASC排序的结果。我希望它能按我要求的顺序返回6,3,5。 问题答案:
如何使用regex匹配任何单词而不显示指定的单词 我想去掉“你”这个词 我有一些词例如: 所以,这个项目的结果是: