Прежде всего, так как никто не упомянул об этом, Mockito поддерживает цепочку, поэтому вы можете просто сделать:
when(context.add(entity).specificResult()).thenReturn(specificResult);
(и см. Комментарий Брайса о том, как это сделать, извините, я пропустил это!)
Во-вторых, оно сопровождается предупреждением: «Не делайте этого, кроме устаревшего кода». Вы правы насчет того, что насмешливое возвращение было немного странным. В общем, все в порядке, если вы говорите: «Мой класс должен сотрудничать с таким помощником, как », но в этом случае он взаимодействует между двумя разными классами, объединяя их вместе.
Непонятно, почему Бегун должен получить SpecificResult, а не какой-либо другой результат, полученный из context.add(entity)
, поэтому я собираюсь сделать предположение: Result
содержит результат с некоторыми сообщениями или другими информация, и вы просто хотите знать, является ли это успехом или неудачей.
Это похоже на то, как я говорю: «Не говорите мне все о моем заказе на покупку, просто скажите мне, что я сделал это успешно!» Бегун не должен знать , что вам нужен только этот конкретный результат; он должен просто вернуть все, что вышло, точно так же, как Amazon показывает вам ваш общий объем, стоимость доставки и все вещи, которые вы купили, даже если вы совершали там много покупок и прекрасно знаете, что вы получаете.
Если некоторые классы регулярно используют ваш Runner только для того, чтобы получить конкретный результат, в то время как другим требуется дополнительная обратная связь, я бы сделал два метода для этого, например, с именами add
и addWithFeedback
, так же как Amazon Вы совершаете покупки в один клик по другому маршруту.
Однако будьте прагматичны. Если он читается так, как вы это сделали, и все это понимают, используйте Mockito, чтобы связать их в цепочку и назвать это днем. Вы можете изменить его позже, если вам нужно.