断言两个 JSON 结果以随机顺序输出

Asserting two JSON results that are output in random order

进行单元测试时,我需要断言两个 JSON 结果以随机顺序填充地图。

两者 JSONs 具有相同的架构,但大多数内容确实不同。

这些来自 Kafka 流(测试时为 JavaPairDStream)并从 tuple2 中提取,然后使用 Jackson ObjectMapperJSON 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", ... )));