Mockito: как имитировать метод с результатом в зависимости от одного из его параметров? - PullRequest
2 голосов
/ 20 июня 2020

Есть ли способ передать параметры имитируемой функции и использовать это значение параметра внутри. Пример ( имя уведомления как параметр ):

Mockito.when(clientRepo.registerNewClient(Mockito.any(String.class) <b>as name</b>))
    .thenReturn(
        dslContext
            .insertInto(CLIENT)
            .set(CLIENT.CLIENT_NAME, <b>name</b>)
            .execute());

Есть ли способ сделать это?

1 Ответ

4 голосов
/ 20 июня 2020

Вам нужно использовать thenAnswer и получить аргумент из InvocationOnMock.

final Repo clientRepo = Mockito.mock(Repo.class);
Mockito.when(clientRepo.registerNewClient(Mockito.any(String.class)))
    .thenAnswer(
        (Answer<Client>)
            invocationOnMock -> new Client(
                invocationOnMock
                    .getArgumentAt(0, String.class)
                    .toUpperCase()
            )
    );
Assertions.assertEquals(
    clientRepo.registerNewClient("fff"), new Client("FFF")
);
...