0

这是我的实现:

List<Calendar> fetch(String input) {
    return Optional.ofNullable(input)
            .map(client::getCalendars)
            .orElse(repository.fetch());
}

和测试:

@Test
void fetchGetsDataFromHolidayClient() {
    //Given
    String input = "search by post code or city";
    List<Calendar> expected = singletonList(mock(Calendar.class));
    doReturn(expected).when(client).getCalendars(input);
    // When
    List<Calendar> actual = service.fetch(input);
    // Then
    verify(client).getCalendars(input);
    verify(repository, never()).fetch();
    assertThat(expected).isEqualTo(actual);
}

测试失败,结果如下:

从来不想在这里:-> 在 ServiceTest.fetchGetsDataFromHolidayClient(ServiceTest.java:57) 但在这里调用:-> 在 Service.fetch(Service.java:39)

Calendar 是我的 POJO,它不是 java.util.Calendar!我使用了 Oracle JK 8、Junit5。这是mockito的错误吗?

4

1 回答 1

2

这不是错误,而是orElse当可选项具有非空值时评估。

你需要orElseGet. 因此,只有在需要时才会调用存储库。-

List<Calendar> fetch(String input) {
return Optional.ofNullable(input)
        .map(client::getCalendars)
        .orElseGet(() -> repository.fetch());
}
于 2021-09-11T03:47:17.703 回答