java - dynamodb 我如何模拟映射器?

标签 java mockito amazon-dynamodb

我有一段 dynamoDb 相关代码,我想使用 mockito 进行测试。

我要测试的方法包含以下行:

List<NotificationFeedRecord> listResult = mapper.query(NotificationFeedRecord.class, queryExpression);

当我手动测试时它工作正常,我提交了一个查询并从 dynamodb 得到了预期的结果。

我正在编写单元测试并想模拟 mapper.query。

我有:

mapper = mock(DynamoDBMapper.class);
List<NotificationFeedRecord> testList = new ArrayList<>();
when(mapper.query(any(), any())).thenReturn(testList);

这里报错

Error:(133, 37) java: no suitable method found for thenReturn(java.util.List<notificationfeed.lib.db.NotificationFeedRecord>)
      (argument mismatch; java.util.List<notificationfeed.lib.db.NotificationFeedRecord> cannot be converted to com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList<java.lang.Object>)

我已经尝试了一系列修复(例如,创建 PaginatedQueryList 并返回它,更改查询匹配器),但都给出了错误。

.query 方法声明如下:

public <T> PaginatedQueryList<T> query(Class<T> clazz, DynamoDBQueryExpression<T> queryExpression) {
        return query(clazz, queryExpression, config);
    }

如何模拟 mapper.query?有什么特别之处吗?

最佳答案

这真的很简单,我必须模拟 PaginatedQueryList 然后:

when(mapper.query(any(), anyObject())).thenReturn(paginatedQueryList)

;

这对我有用。

这些是我为我们的测试设置的所有条件:

@Mock private PaginatedQueryList paginatedQueryList;
doReturn(mockQuery).when(utilSpy).getQueryExpression();

when(mockQuery.withFilterExpression(anyString())).thenReturn(mockQuery);
when(mockQuery.withLimit(anyInt())).thenReturn(mockQuery);
when(mockQuery.withExpressionAttributeValues(anyMap())).thenReturn(mockQuery);
when(mockQuery.withIndexName(anyString())).thenReturn(mockQuery);
when(mockQuery.withHashKeyValues(anyString())).thenReturn(mockQuery);
when(mockQuery.withConsistentRead(anyBoolean())).thenReturn(mockQuery); 
when(mockQuery.withRangeKeyCondition(anyString(), anyObject())).thenReturn(mockQuery);
when(mapper.query(any(), anyObject())).thenReturn(paginatedQueryList);

关于java - dynamodb 我如何模拟映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288811/

相关文章:

java - 在 JUnit 测试中,有没有一种方法可以确保所有断言都已执行?

java swing下载栏

java - Junit 测试中的模拟错误 UnfinishedStubbingException

java - org.mockito.exceptions.misusing.MissingMethodInitationException

amazon-web-services - 适用于 Go 的 AWS 开发工具包 - DynamoDb - 向 FilterExpression 添加多个条件

java - 为什么 ArrayAdapter 只从数组的每个成员中检索一个对象,而不是整个对象?

java - 不支持的SignatureMethodException : HMAC-SHA1 exception in tomcat with jerseyoauth

java - 在 JUnit 中设置测试的成本 - 使用模拟对象与遗留代码中的存储库测试

elasticsearch - 结合使用AWS Appsync和DynamoDB,您是否应该通过将相关数据的 “redundant copies”存储在同一张表上(去规范化)来建立关系模型?

amazon-web-services - 一次性从多个区域访问 DynamoDb 中的数据