gpt4 book ai didi

java - 单元测试 DynamoDB PaginatedQueryList 时如何返回列表

转载 作者:行者123 更新时间:2023-12-02 18:16:31 25 4
gpt4 key购买 nike

我有一个查询语句,它返回 PaginatedQueryList我将它分配给一个列表。然后我对列表进行操作。

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

哪里listList<MyClass> (ArrayList)是我自己构造的,想传递给主程序来测试主逻辑。

但是它抛出

java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList

执行时如何发送列表mappper.query(..) .

动机是将我构建的列表发送至entries执行mapper.query(..)时.

注意:

我还尝试发送 mocked PaginatedQueryList 但当它出现时 entries.stream()我想发送实际的流。我尝试过像

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

它抛出

java.lang.IllegalStateException: stream has already been operated upon or closed at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)

注2:

我使用entries.stream()我的逻辑要测试两次

最佳答案

Mockito 为此提供了一些强大的工具。

List<MyClass> list = new ArrayList<>();
when(mapper.query(eq(MyClass.class), any(DynamoDBQueryExpression.class)))
.thenReturn(mock(PaginatedQueryList.class, withSettings().defaultAnswer(new ForwardsInvocations(list))));

这将返回一个模拟的 PaginatedQueryList ,它将所有方法调用转发到 list

关于java - 单元测试 DynamoDB PaginatedQueryList 时如何返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36255744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com