thenReturn
хорошо, когда все, что вы делаете, возвращает предварительно вычисленное значение.Если вы хотите смоделировать экземпляр, чтобы что-то делал каждый раз, когда вызывается ваш метод, тогда правильным решением будет Ответ (переданный с thenAnswer
или doAnswer
)Это интерфейс с одним методом, который хорошо работает с Java 8. Вы можете получить подробную информацию о вызове (включая его аргументы) с его параметром InvocationOnMock , а возвращаемое значение Answer.answer
будет действовать каквозвращаемое значение метода.
Это также хорошее решение, когда вам нужно, чтобы у вашего вызова были побочные эффекты, такие как изменение его аргумента или вызов функции обратного вызова.
when(cpMock.requestInstance()).thenAnswer(invocation => new Instance(size));
Без лямбда-выражений,вызов немного более многословен, но не так уж и плох:
when(cpMock.requestInstance()).thenAnswer(new Answer<Instance>() {
@Override public Instance answer(InvocationOnMock invocation) {
return new Instance(size));
}
}