2

我有一個查詢語句,它返回PaginatedQueryList並將其分配給列表。然後我在名單上操作。如何在單元測試時返回列表DynamoDB分頁查詢列表

List<MyClass> entries= mapper.query(MyClass.class, queryExpression); 
//Logic to test 
Map<String, Map> map = entries.stream() 
         .collect(Collectors.toMap(MyClass::getA, MyClass::getB)); 
.... 
.... 

我試圖測試它像

when(mapper.query(eq(MyClass.class), any(DynamoDBQueryExpression.class))) 
           .thenReturn((PaginatedQueryList<MyClass>) list); 

list哪裏是List<MyClass>(ArrayList的),我自己構造,並希望將其傳遞到主程序來測試主邏輯。

但它拋出

java.lang.ClassCastException:java.util.ArrayList中不能轉換到com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList

我怎麼能發送列表何時執行mappper.query(..)

動機是在執行mapper.query(..)時將我構建的列表發送到entries

注:

我也試着發送mocked PaginatedQueryList但是當它entries.stream()我要發送的實際流。 我試着像

when(paginatedQueryList.stream()).thenReturn(Stream.of(list.get(0), list.get(1))); 

它拋出

java.lang.IllegalStateException:流已在運行或關閉java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:229 )

注2:

我用entries.stream()兩次在我的邏輯測試

回答

0

我可以通過發送嘲笑PaginatedQueryList來解決問題,然後發送list.stream()兩次(爲entries.stream()每個接入)。

when(paginatedQueryList.stream()).thenReturn(list.stream()).thenReturn(list.stream()); 

任何更好的方法是值得歡迎的。