2017-06-12 5 views
0

Hier Stück Code verspotten, die ich willUnable dynamoDBMapper.query

... testen

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 

Die Funktion, die Abfrage schafft wie diese

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

...

und ich versuche es so zu testen

@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()); 
} 

Aber anstatt unter AmazonServiceException gefangen zu werden, bewegt sich der Code auf der nächsten Geschäftslogik. Das lässt mich denken, dass ich wahrscheinlich nicht richtig spotte. Was ich hier vermisse.

+0

Sind Sie sicher, dass Sie den Mock korrekt einstellen? Der Code sieht gut aus ... Das einzige, was mir einfällt, ist, dass Sie den Mock möglicherweise nicht mit dem DB-Mapper im Objekt setzen. – AnthonyJClink

+1

Außerdem habe ich festgestellt, dass Sie sich über die .scan-Methode lustig machen ... In Ihrer Implementierung verwenden Sie .query – AnthonyJClink

+0

manchmal wissen Sie, was Sie tun, ist richtig, aber Sie vergessen, dass Sie Koffein in der längsten Zeit nicht gehabt haben! und das ist, wenn Sie ein zweites Auge brauchen ... das Ersetzen von "scan" durch "query" behebt das Problem :) Bitte schreiben Sie Ihren Beitrag als Antwort, damit ich sie als richtige Antwort akzeptieren kann. –

Antwort

2

Ihr Code sieht gut aus aber ich festgestellt, dass Sie die .Scan Methode spotten ... In Ihrer Implementierung Sie verwenden .query

I JMockit verwenden in der Regel, in JMockit dies zu tun in einem leeren Objekt führen würde, dass Ich denke, in Mokito würde es am Ende Null zurückgeben. Wenn dies der Fall ist, wird eine NPE ausgelöst und Ihr Test wird fortgesetzt, da die falsche Ausnahme abgefangen wurde.