JUnit 5 Mockito Stubbing Ссылочный метод и проверка того, что он вызван - PullRequest
2 голосов
/ 03 мая 2020

Я работаю с JUnit5 и их функцией ParameterizedTest. Как мне работать со ссылками на методы в качестве части источника данных?

Пример:

public enum Status {
  APPROVE, DECLINE
}

@Mock
public MockService mockService;

// Normal Test
@Test
void testApprove() {
  Mockito.doReturn(null)
    .when(mockService)
    .approveCall();

  Mockito.verify(mockService).approveCall();
}

// Parameterized Test
Map<Status, Supplier<?>> mockMap = Map.ofEntries(  // Java 9 method
  Map.entry(APPROVE, mockService::approveCall),
  Map.entry(DECLINE, mockService::declineCall)
);

@ParameterizedTest
@EnumSource(Status.class)
void test(Status status) {
  Supplier<?> supplier = mockMap.get(status);

  ??
}

Я хочу, чтобы мой второй тест выполнял те же действия, что и мой первый тест, но также охватывал DECLINE значение. Как я могу параметризовать ссылку на метод макета?

1 Ответ

0 голосов
/ 05 мая 2020

Я работал над этим с несколькими функциональными / лямбда-трюками.

public class MyTest {
    public enum Status {
        APPROVE, DECLINE
    }

    @Mock
    public MockService mockService;


    // Parameterized Test
    Map<Status, MockitoVerifier> mockMap = Map.ofEntries(  // Java 9 method
            Map.entry(Status.APPROVE, () -> Mockito.verify(mockService).approveCall()),
            Map.entry(Status.DECLINE, () -> Mockito.verify(mockService).declineCall())
    );

    @ParameterizedTest
    @EnumSource(Status.class)
    void test(Status status) {
        MockitoVerifier<?> verifier = mockMap.get(status);
        verifier.verify();
    }

    @FunctionalInterface
    interface MockitoVerifier<T> {
        T verify();
    }
}
...