Подтвердить что ты не робот

Mockito - возвращает тот же объект, который передается в метод

Предположим, что у меня есть следующий метод в каком-то классе службы:

public SomeEntity makeSthWithEntity(someArgs){
    SomeEntity entity = new SomeEntity();
    /**
     * here goes some logic concerning the entity
     */
    return repository.merge(entity);
}

Я бы хотел проверить поведение этого метода и, следовательно, хочу издеваться над repository.merge следующим образом:

when(repository.merge(any(SomeEntity.class))).thenReturn(objectPassedAsArgument);

Затем издеваемое репозиторий возвращает то, что передал makesSthWithEntity, и я могу легко протестировать его.

Любые идеи, как я могу заставить mockito возвращать objectPassedAsArgument?

4b9b3361

Ответ 1

Вы можете реализовать Answer, а затем использовать thenAnswer().

Нечто похожее на:

when(mock.someMethod(anyString())).thenAnswer(new Answer() {
    Object answer(InvocationOnMock invocation) {
        return invocation.getArguments()[0];
    }
});

Конечно, как только у вас есть это, вы можете реорганизовать ответ на повторно используемый ответ ReturnFirstArgument или аналогичный.

Ответ 2

Или лучше использовать отправленные mockito ответы

when(mock.something()).then(AdditionalAnswers.returnsFirstArg())

Где AdditionalAnswers.returnsFirstArg() может быть статически импортировано.