Фреймворки Mocking предназначены для упрощения моделирования зависимостей класса, который вы тестируете. Когда вы используете макет фреймворка для симуляции класса, большинство фреймворков динамически создают подкласс и заменяют реализацию метода кодом для определения, когда вызывается метод, и возврата поддельного значения.
При тестировании абстрактного класса вы хотите выполнить неабстрактные методы тестируемого субъекта (SUT), поэтому фальшивый фреймворк - это не то, что вам нужно.
Частично путаница заключается в том, что ответ на вопрос, с которым вы связались, говорит о том, чтобы изготовить ручной макет, исходящий из вашего абстрактного класса. Я бы не назвал такой класс насмешкой. Макет - это класс, который используется в качестве замены зависимости, запрограммирован с ожиданиями и может быть запрошен, чтобы увидеть, удовлетворяются ли эти ожидания.
Вместо этого я предлагаю определить неабстрактный подкласс вашего абстрактного класса в вашем тесте. Если это приводит к слишком большому количеству кода, это может быть признаком того, что ваш класс трудно расширить.
Альтернативное решение состоит в том, чтобы сделать ваш тестовый пример сам по себе абстрактным, с абстрактным методом для создания SUT (другими словами, тестовый пример будет использовать шаблон проектирования Template Template ).
SomeAbstract spy = spy(SomeAbstract.class);