use*_*er7 6 java unit-testing mockito amazon-web-services amazon-dynamodb
我有一个查询语句,它返回a PaginatedQueryList并将其分配给List。然后,我对列表进行操作。
List<MyClass> entries= mapper.query(MyClass.class, queryExpression);
//Logic to test
Map<String, Map> map = entries.stream()
.collect(Collectors.toMap(MyClass::getA, MyClass::getB));
....
....
Run Code Online (Sandbox Code Playgroud)
我试图像测试
when(mapper.query(eq(MyClass.class), any(DynamoDBQueryExpression.class)))
.thenReturn((PaginatedQueryList<MyClass>) list);
Run Code Online (Sandbox Code Playgroud)
其中list是List<MyClass>(ArrayList的),我自己构造,并希望将其传递到主程序来测试主逻辑。
但是它抛出
java.lang.ClassCastException:无法将java.util.ArrayList强制转换为com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList
清单执行后如何发送mappper.query(..)。
目的是entries在执行时将我构造的列表发送给该列表mapper.query(..)。
注意:
我也尝试发送mockedPaginatedQueryList,但是当entries.stream()我想要发送实际流时。我试过像
when(paginatedQueryList.stream()).thenReturn(Stream.of(list.get(0), list.get(1)));
Run Code Online (Sandbox Code Playgroud)
它抛出
java.lang.IllegalStateException:流已经在java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)上被操作或关闭。
笔记2:
我用entries.stream()两次逻辑来测试
Mik*_*Hay 18
Mockito 为此提供了一些强大的工具。
List<MyClass> list = new ArrayList<>();
when(mapper.query(eq(MyClass.class), any(DynamoDBQueryExpression.class)))
.thenReturn(mock(PaginatedQueryList.class, withSettings().defaultAnswer(new ForwardsInvocations(list))));
Run Code Online (Sandbox Code Playgroud)
这将返回一个PaginatedQueryList将所有方法调用转发到list.
我能够通过发送模拟PaginatedQueryList然后发送list.stream()两次(每次访问entries.stream())来解决问题。
when(paginatedQueryList.stream()).thenReturn(list.stream()).thenReturn(list.stream());
Run Code Online (Sandbox Code Playgroud)
欢迎任何更好的方法。
| 归档时间: |
|
| 查看次数: |
4472 次 |
| 最近记录: |