2014-10-02 4 views
19

Давайте представим, у меня есть следующий метод в каком-нибудь классе службы: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?

+0

Вы имеете в виду, когда (repository.merge (любой (SomeEntity.class))). ThenReturn (entity); ? –

ответ

17

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

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

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

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

+9

Уже существует в mockito: 'AddtionalAnswers.returnsFirstArg()' – Brice

+1

Вы все же можете сократить код с помощью 'thenAnswer (i -> i.getArguments() [0])'. Отличное решение, и BTW 'AddtionalAnswers.returnsFirstArg()' дает мне некоторые ошибки. – EliuX

40

Или лучше с помощью Mockito погружено ответы

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

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

+1

Ницца! Я не ожидал, что это будет достаточно распространено, чтобы быть встроенным, не говоря уже о «returnsSecondArg» и т. Д. Мне также нравится использовать псевдоним 'then()' здесь, поскольку он читается лучше. –

+0

Да;) мы представили псевдоним 'then', чтобы лучше читать, когда его использовали в сочетании со статическим заводским методом для пользовательских ответов. – Brice

+0

@MarkPeters, 'AdditionalAnswers' для« менее распространенных ответов », говорится в документации – smac89

Смежные вопросы