2017-06-29 1 views
0

Hallo Ich habe eine nette Schnittstelle für meinen Dienst erstellt, der Objekt akzeptiert, das 2 Schnittstellen implementiert, aber jetzt habe ich Schwierigkeiten, einen Matcher für diese Schnittstelle zu erstellen.Mockito Passende parametrisierte Methode mit multipler Schnittstelle

Jeder hat eine Idee, wie man einen Matcher für die folgenden erstellen?

<T extends HasDocumentTags & HasResources> ResponseEntity<Void> setDocumentMetadata(T t); 

Nur ein jeder() würde hier nicht helfen, da die Methode bereits überlastet ist zweimal

ResponseEntity<Void> setDocumentMetadata(List<Document> attachments); 
ResponseEntity<Void> setDocumentMetadata(ApproveDocumentsCommand<?> command); 

nun den Dienst ist und eine Antwort

when(service.setDocumentMetadata(???).thenReturn(anAnswer); 
Ich versuche, zu verspotten

Ich kann einfach nicht herausfinden, die richtige Matcher für jedes(), eq() oder was auch immer arbeiten wird. Oder versuche ich etwas, das nicht möglich ist (in Java8)? Können Sie mir helfen?

Antwort

0

Verwendung jeden für Dokumenttyp und ApproveDocumentsCommand:

when(service.setDocumentMetadata(any(Document.class)).thenReturn(anAnswer1); 
when(service.setDocumentMetadata(any(ApproveDocumentsCommand.class)).thenReturn(anAnswer2); 

ich das jeder (Document.class) und jeder (ApproveDocumentsCommand.class) enoght werden soll.

auch können Sie ArgumentMatcher verwenden, wenn Sie Typ für Argumente mit einigen zusätzlichen Kontrollen überprüfen müssen:

when(service.setDocumentMetadata(argThat(new MyCommonMatcher<>()))) 
     .thenReturn(responseEntityOk); 
    when(service.setDocumentMetadata(argThat(new MyDocumentMatcher<>()))) 
     .thenReturn(responseEntityOk); 
    when(service.setDocumentMetadata(argThat(new MyApproveDocumentsCommandMatcher<>()))) 
     .thenReturn(responseEntityOk); 

class MyCommonMatcher<T extends HasDocumentTags & HasResources> 
                 extends ArgumentMatcher<T>{ 

    @Override 
    public boolean matches(Object argument) { 
     return (argument instanceof HasResources) && (argument instanceof HasDocumentTags); 
    } 
} 

class MyDocumentMatcher<T extends HasDocumentTags & HasResources> 
                 extends ArgumentMatcher<T>{ 

    @Override 
    public boolean matches(Object argument) { 
     return argument instanceof Document; 
    } 
} 

class MyApproveDocumentsCommandMatcher<T extends HasDocumentTags & HasResources> 
                 extends ArgumentMatcher<T>{ 

    @Override 
    public boolean matches(Object argument) { 
     return argument instanceof ApproveDocumentsCommand; 
    } 
} 
+0

Thnx für die Antwort! –

Verwandte Themen