gpt4 book ai didi

java - 无法模拟 dynamoDBMapper.query

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

这是我想测试的一段代码

...

DynamoDBQueryExpression<Order> queryExpression = createQueryForLatestOrders(orderId, storeId, time);
PaginatedQueryList<Order> orders;
try{
orders = dynamoDBMapper.query(Order.class, queryExpression);
} catch (AmazonServiceException ase){
if (AmazonServiceException.ErrorType.Client.equals(ase.getErrorType())) {
throw new InternalServiceException(ase);
} else {
throw new DependencyFailureException(ase);
}
} catch (AmazonClientException e) {
throw new DependencyFailureException(e);
}
// other business logic

创建查询的函数是这样定义的

private DynamoDBQueryExpression<Order> createQueryForLatestOrders(String orderId, String storeId, LocalDateTime time) { // ... implementation // }

...

我试图像这样测试它

@Test(expected = DependencyFailureException.class)
public void testGetOrdersThrowsAWSServerException() throws Exception {
when(mockDynamoDBMapper.scan(eq(Order.class), any())).thenThrow(AmazonServiceException.class);

mockOrdersManager.getOrders(orderId, storeId, LocalDateTime.now());
}

但是,代码并没有被 AmazonServiceException 捕获,而是转移到下一个业务逻辑。这让我觉得我可能没有正确地进行 mock 。我在这里缺少什么。

最佳答案

您的代码看起来不错,但我注意到您正在 mock .scan 方法...在您的实现中您正在使用 .query

我通常使用jmockit,在jmockit中这样做会导致返回一个空对象,我认为在mokito中它最终会返回null。如果这是真的,则会抛出 NPE,并且由于捕获了错误的异常,您的测试将继续。

关于java - 无法模拟 dynamoDBMapper.query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44509479/

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