繁体   English   中英

Java 8流中的JUnit断言

[英]JUnit assertions within in Java 8 stream

假设我有三个对象保存到数据库并将db生成的ID设置为。 我不知道从方法saveToDb返回的对象的顺序。 但是我想对这些生成的ID进行测试。 我如何在流中做到这一点? 我想做这样的事情:

List<MyObject> myObjects = getObjects();
numRecords = saveToDb(myObjects); // numRecords=3
List<Integer> intArray = Arrays.asList(1, 2, 3);
intArray.stream()
  .forEach(it -> myObjects.stream()
    .filter(it2 -> it2.getId().equals(it))
    .????

但是我不确定我的assertEquals()会在这样的语句中出现在哪里。 或者我的方法都错了? 我知道我可以使用简单的for循环,但我喜欢流的优雅。 另外,有没有办法动态创建intArray,以防我有超过3个myObjects?

似乎(如果我理解正确),这样的事情怎么样:

 boolean result = Arrays.asList(1, 2, 3).stream()
            .allMatch(i -> objects
                .stream()
                .map(MyObject::getId)
                .filter(j -> j == i).findAny().isPresent());
    Assert.assertTrue(result);

所以你基本上想检查一个MyObject实例是否被分配了一个ID? 与任何重要性的数组中的ID是否相等?

如果不:

List<MyObject> objects = getObjects();
saveToDb(objects);
objects.stream().map(MyObject::getId).forEach(Assert::assertNotNull);

假设MyObject上有一个“getId”方法。

只需为您的其他问题补充一点:

另外,有没有办法动态创建intArray,以防我有超过3个myObjects?

是的,您可以使用IntStream根据对象的大小创建流,如:

IntStream.rangeClosed(1, objects.size()) // both start and end inclusive

并且还有一个方法IntStream.range(int start, int end) ,其end是独占的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM