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

标签 java json unit-testing switch-statement assert

在单元测试时,我需要断言两个 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/

相关文章:

java - 父 POM/NOOP 父 POM 中的 "Child-only configuration"

java - java查找字符串中单词的位置

javascript - 使用 for-each 循环对特定对象进行迭代

unit-testing - 我应该对一个类进行单元测试以获取 MEF 属性吗?

java - Camel CXF : compressing response with CXFOutInterceptor throws classcast exception

java - 运行时 CURL 中的空间问题

json - 将一个目录中的所有 JSON 文件合并到一个文件中 - Windows

json - 错误字符串的长度超过了maxJsonLength属性设置的值

java - 使用反射消隐字段

android - Android Studio中的测试支持库未编译