这是我要测试的一段代码
...
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
所捕获,而是移动到下一个业务逻辑上。这让我觉得可能我没有做正确的嘲笑。我在这里失踪了什么。
答案 0 :(得分:2)
您的代码看起来很好但是我注意到您正在嘲笑.scan方法...在您的实现中,您正在使用.query
我通常使用jmockit,在jmockit这样做会导致返回一个空对象我认为在mokito中它最终会返回null。如果这是真的,则会抛出NPE,并且由于捕获到错误的异常,您的测试将继续。