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()); 

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