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
?
Ответы
Ответ 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()
может быть статически импортировано.