根据请求重新打开,但解决方案(使用 ArgumentMatcher)与链接答案中的解决方案相同。当然,你不能使用当存根时,但其他一切都是一样的。ArgumentCaptor
class OfficeWithId implements ArgumentMatcher<Office> {
long id;
OfficeWithId(long id) {
this.id = id;
}
@Override public boolean matches(Office office) {
return office.id == id;
}
@Override public String toString() {
return "[Office with id " + id + "]";
}
}
when(client.callApi(anyString(), argThat(new IsOfficeWithId(123L)))
.thenReturn(responseOne);
因为 ArgumentMatcher 只有一个方法,你甚至可以在 Java 8 中把它变成一个 lambda:
when(client.callApi(anyString(), argThat(office -> office.id == 123L))
.thenReturn(responseOne);
如果您已经在使用 Hamcrest,则可以使用 来调整 Hamcrest 匹配器,或者使用内置的 hasPropertyWithValue
:MockitoHamcrest.argThat
when(client.callApi(
anyString(),
MockitoHamcrest.argThat(hasPropertyWithValue("id", 123L))))
.thenReturn(responseOne);