К сожалению, я не думаю, что есть простой способ высмеять super.calculate
.
Я вижу, что вы хотите написать «чистый» модульный тест для A, который не опирается на B, что является разумной целью. Но если A вызывает защищенный метод в своем суперклассе, Java затрудняет разделение двух классов.
Это один из многих примеров, когда использование классов наследования пар более тесно, чем вы хотели бы.
В идеале A будет оборачивать B, а не расширять его (т. Е. Используя композицию, а не наследование), и тогда будет вызывать myB.calculate
вместо super.calculate
.
Оба класса могут реализовывать один и тот же интерфейс (например, вычисляемый), чтобы клиенты могли полиморфно обрабатывать их. Этот подход потребовал бы, чтобы B.calculate был публичным или, по крайней мере, публичным. Ваш модульный тест может настроить A, который оборачивает макет B, тем самым решая вашу проблему.
Я думаю, что вам нужно выбрать между увеличением видимости Calculate (), как описано выше, и написанием чистого модульного теста - я не думаю, что вы можете иметь оба.