簡體   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