在单元测试时,我需要断言两个 JSON
结果,以随机顺序填充 map 。
两个 JSON
具有相同的架构,但大多数内容有所不同。
这些来自 Kafka
流(测试时为 JavaPairDStream
),从 tuple2
中提取,然后从 JSON 字符串转换
使用 Jackson ObjectMapper
进行映射。我正在使用 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", ... )));
关于java - 断言以随机顺序输出的两个 JSON 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39752383/