Моя команда разработчиков начала использовать Mockito и классы, которые были определены как "окончательные". Я читал в журнале Effective Java Джошуа Блоха и в теме SO When to use final, что все классы должны использовать модификатор final. В треде были некоторые разногласия, но я согласен с идеей принудительной композиции классов, если наследование не имеет смысла.
Что мне делать, если я хочу протестировать классы с помощью среды тестирования, такой как Mockito, которая требует, чтобы классы не имели модификатора "final"? Я надеюсь, что кто-то еще сталкивался с подобными проблемами во время разработки. К каким решениям пришла ваша команда разработчиков?
Есть два очевидных ответа, таких как использование JMock или удаление модификатора «final» для классов, которые мы хотим протестировать, но мы хотим придерживаться одной внешней среды тестирования (кроме JUnit), и может быть трудно убедить других разработчиков удалить модификатор. «конечный» модификатор.
Спасибо.
final
определенно не лучшая практика... прошло некоторое время с тех пор, как я читал "Эффективную Java", но консенсус связанного потока, похоже, тоже не подразумевает этого. Вы должны пометить классыfinal
, чтобы указать, что по какой-то причине их не следует расширять - если нет, это просто добавляет ненужную сложность - как вы обнаружили. Кроме того, если вы понимаете, что вам нужно расширить класс где-то в будущем, вам придется изменить код исходного класса, чтобы написать новый класс, что нарушает принцип Open/Closed. - person Nate   schedule 13.01.2010