0
下面是碼片,我想測試無法嘲笑dynamoDBMapper.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());
}
但代碼不在AmazonServiceException
下被捕獲,代碼在下一個業務邏輯上移動。這讓我覺得我可能沒有正確地嘲笑。我在這裏錯過了什麼。
你確定你正確地設置了模擬嗎?代碼看起來很好......我能想到的唯一的事情就是你可能不會在使用db映射器的對象中設置模擬。 – AnthonyJClink
Aslo,我注意到你正在嘲笑.scan方法......在你的實現中,有時你使用的是.query – AnthonyJClink
,你知道你在做什麼是對的,但你忘記了你沒有咖啡因在最長的時間!那當你需要第二隻眼睛時......用'query'替換'scan'解決了問題:)請把你的文章寫成答案,以便我可以接受它作爲正確的答案。 –