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(..)
。
注意:
我也尝试发送mocked
PaginatedQueryList,但是当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 次 |
最近记录: |