在无序集合中使用断言



我在表格中插入一个Collection<Event>,像这样

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

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

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

为了最清楚起见,我建议将低级谓词封装到帮助程序方法中,并使用 Stream.allMatch 进行检查。

辅助函数(假设放在类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));

最新更新