断言两个 JSON 结果以随机顺序输出
Asserting two JSON results that are output in random order
进行单元测试时,我需要断言两个 JSON
结果以随机顺序填充地图。
两者 JSONs
具有相同的架构,但大多数内容确实不同。
这些来自 Kafka
流(测试时为 JavaPairDStream
)并从 tuple2
中提取,然后使用 Jackson ObjectMapper
从 JSON Strings
转换为 Map .我正在使用 queueStream
但奇怪的是,在使用 Spark
工作流程进行测试时顺序是随机的。
编辑:我决定使用 List
因为集合可能会改变顺序...
这里是 Java
代码:
//Create a list to store maps
List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
//Traverse each map in list and apply correct assertions
for (Map<String, Object> map : list) {
//if Event is "Event1", assertions for "Event1" Event
if (map.get("Event").toString().equals("Event1")) {
Assert.assertEquals(map.get("Event").toString(), "Event1");
more assertions go here...
} else {
//if Event is not "Event1", assertions for "Event2" Event
Assert.assertEquals(map.get("Event").toString(), "Event2");
more assertions go here...
}
}
注意:这现在工作正常,因为我只处理两个不同的事件。但是我想学习如何通过可扩展性来处理这种情况。
试试 hamcrest 匹配器 containsInAnyOrder
。您可能必须编写自定义匹配器以使代码可读。
List<Map<String,Object>> myJsonObjectsInRandomOrder;
...
assertThat(myJsonObjectsInRandomOrder, containsInAnyOrder(new CustomMatcher("Event1", ... ), new CustomMatcher("Event2", ... )));
进行单元测试时,我需要断言两个 JSON
结果以随机顺序填充地图。
两者 JSONs
具有相同的架构,但大多数内容确实不同。
这些来自 Kafka
流(测试时为 JavaPairDStream
)并从 tuple2
中提取,然后使用 Jackson ObjectMapper
从 JSON Strings
转换为 Map .我正在使用 queueStream
但奇怪的是,在使用 Spark
工作流程进行测试时顺序是随机的。
编辑:我决定使用 List
因为集合可能会改变顺序...
这里是 Java
代码:
//Create a list to store maps
List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
//Traverse each map in list and apply correct assertions
for (Map<String, Object> map : list) {
//if Event is "Event1", assertions for "Event1" Event
if (map.get("Event").toString().equals("Event1")) {
Assert.assertEquals(map.get("Event").toString(), "Event1");
more assertions go here...
} else {
//if Event is not "Event1", assertions for "Event2" Event
Assert.assertEquals(map.get("Event").toString(), "Event2");
more assertions go here...
}
}
注意:这现在工作正常,因为我只处理两个不同的事件。但是我想学习如何通过可扩展性来处理这种情况。
试试 hamcrest 匹配器 containsInAnyOrder
。您可能必须编写自定义匹配器以使代码可读。
List<Map<String,Object>> myJsonObjectsInRandomOrder;
...
assertThat(myJsonObjectsInRandomOrder, containsInAnyOrder(new CustomMatcher("Event1", ... ), new CustomMatcher("Event2", ... )));