您好我为我的服务创建了一个很好的接口,它接受实现2个接口的对象,但现在我很难为这个接口创建匹配器。
任何人都知道如何为以下内容创建匹配器?
<T extends HasDocumentTags & HasResources> ResponseEntity<Void> setDocumentMetadata(T t);
只是一个any()在这里没有帮助,因为该方法已经重载了两次
ResponseEntity<Void> setDocumentMetadata(List<Document> attachments);
ResponseEntity<Void> setDocumentMetadata(ApproveDocumentsCommand<?> command);
现在我正在尝试模拟服务并定义答案
when(service.setDocumentMetadata( ??? ).thenReturn(anAnswer);
我无法找出任何(),eq()或其他任何工作的正确匹配器。 或者我在尝试不可能的事情(在java8中)? 你能帮助我吗?
答案 0 :(得分:0)
使用任何类型Document和ApproveDocumentsCommand:
when(service.setDocumentMetadata(any(Document.class)).thenReturn(anAnswer1);
when(service.setDocumentMetadata(any(ApproveDocumentsCommand.class)).thenReturn(anAnswer2);
我这个(Document.class)和任何(ApproveDocumentsCommand.class)应该是enoght。
你也可以使用ArgumentMatcher,如果你需要检查类型的参数和一些额外的检查:
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;
}
}