Java 无法模拟dynamoDBMapper.query
下面是我要测试的一段代码Java 无法模拟dynamoDBMapper.query,java,unit-testing,mockito,Java,Unit Testing,Mockito,下面是我要测试的一段代码 但是代码没有被捕获在AmazonServiceException下,而是继续下一个业务逻辑。这让我觉得我可能没有正确地模仿。我在这里错过了什么 您的代码看起来不错,但我注意到您正在模拟.scan方法。。。在您的实现中,您正在使用.query 我通常使用jmockit,在jmockit中,这样做会导致返回一个空对象,我认为在mokito中,它最终会返回null。如果这是真的,将抛出一个NPE,由于捕获了错误的异常,您的测试将继续进行。您的代码看起来不错,但是我注意到您正
但是代码没有被捕获在
AmazonServiceException
下,而是继续下一个业务逻辑。这让我觉得我可能没有正确地模仿。我在这里错过了什么 您的代码看起来不错,但我注意到您正在模拟.scan方法。。。在您的实现中,您正在使用.query
我通常使用jmockit,在jmockit中,这样做会导致返回一个空对象,我认为在mokito中,它最终会返回null。如果这是真的,将抛出一个NPE,由于捕获了错误的异常,您的测试将继续进行。您的代码看起来不错,但是我注意到您正在模拟.scan方法。。。在您的实现中,您正在使用.query
我通常使用jmockit,在jmockit中,这样做会导致返回一个空对象,我认为在mokito中,它最终会返回null。如果这是真的,将抛出一个NPE,并且由于捕获了错误的异常,您的测试将继续进行。您确定正确设置了模拟吗?代码看起来很好。。。我能想到的唯一一件事是,您可能没有使用db mapper在对象中设置mock。。。在您的实现中,您正在使用.querys。有时,您知道您所做的是正确的,但是您忘记了您已经很久没有喝过咖啡因了!这时你需要第二只眼睛。。。将
scan
替换为query
修复了以下问题:)请将您的帖子作为答案,以便我可以将其作为正确答案接受。您确定正确设置了模拟吗?代码看起来很好。。。我能想到的唯一一件事是,您可能没有使用db mapper在对象中设置mock。。。在您的实现中,您正在使用.querys。有时,您知道您所做的是正确的,但是您忘记了您已经很久没有喝过咖啡因了!这时你需要第二只眼睛。。。将scan
替换为query
修复了问题:)请将您的帖子作为答案写下来,这样我才能接受它作为正确答案。
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());
}