У меня есть интерфейс, который выглядит следующим образом
interface Evaluator {
boolean requiresP2();
EvalResult evaluate(Param1 p1, Param2 p2, Param3 p3);
// some more methods
}
Этот интерфейс реализован несколькими классами.Параметр p2
метода оценки используется некоторыми и не используется другими.Метод requiresP2
в основном возвращает логическое значение, указывающее, использует ли метод оценки p2
или нет.
Теперь, эти вопросы могут показаться немного странными вне контекста, но, поверьте мне, это имеет смысл в нашем случае использования,Кроме того, потребовалось бы много времени на рефакторинг всего кода, чтобы устранить необходимость в методе requiresP2
, поэтому я был бы признателен, если бы мы обсудили решения, отличные от рефакторинга кода сверху вниз.
Проблема в том, что возвращаемое значение метода requiresP2
основано на том, как реализован метод evaluate
.Поэтому каждый должен убедиться, что он обновляет метод requiresP2
при изменении метода evaluate
.
Я ищу способы, чтобы это могло быть выполнено компилятором / юнит-тестами / линтерами, а не оставлялэто в память разработчика.
РЕДАКТИРОВАТЬ : я все еще изучаю применимость фальшивых фреймворков для этой проблемы.
Я думал, что смогу отразить в модульных тестах для проверкиТело evaluate
в модульном тесте проверяет, ссылается ли оно на p2
или нет, а затем проверяет, совпадает ли оно со значением, возвращаемым методом requiresP2
, но кажется, что невозможно проверить тело метода, используя отражение.
Я ищу предложения о том, как это сделать.Любой вклад приветствуется.