在无序集合中使用断言

时间:2019-06-17 09:58:57

标签: java unit-testing collections

我正在将Collection<Event>插入表格中

Collection<Event> eventCollection = service.insert(events);

现在,我需要测试Event中的eventCollection个具有某些属性。我不确定EventeventCollection中存储的顺序。目前,这就是我的断言方式。

assertTrue(
        Iterables.get(eventCollection, 0).getPojo.getField1()
            .equals("Some Value") &&
            Iterables.get(eventCollection, 0).getPojo.getField2()
            .equals("Some Value") &&
            Iterables.get(eventCollection, 0).getPojo.getField3()
            .equals("Some Value") &&                
            Iterables.get(eventCollection, 1).getPojo.getField1()
            .equals("Some Value") &&
            eventCollection, 1).getPojo.getField2()
            .equals("Some Value") &&
            Iterables.get(eventCollection, 1).getPojo.getField3()
            .equals("Some Value"))
    );

我知道eventCollection中有两个元素,但是我不确定它们的顺序。Iterables.get似乎可以正常工作,但是我想知道是否有任何更简单的方法/使用流api进行此操作的更短方法?

编辑:"Some Value"不一定总是引用String

1 个答案:

答案 0 :(得分:1)

为了获得最大的清晰度,我建议将低级谓词封装到一个辅助方法中,并使用Stream.allMatch进行检查。

Helper函数(假定放置在类Context中,确切位置无关紧要):

public static boolean expectedValues(Event event) {
    return event.getPojo().getField1().equals("Some Value") &&
            event.getPojo().getField2().equals("Some Value") &&
            event.getPojo().getField3().equals("Some Value");
}

实际检查,确实更加不言而喻:

assertTrue(eventCollection.stream().allMatch(Context::expectedValues));