Всем привет.
В общем и целом, такой вопрос. Насколько целесообразно помечать тест класс как final? Влияет ли это каким-то образом на производительность или компиляцию. Может есть какие статьи на эту тему? В гугле похожего ничего не нашел(
Спасибо.
Скорее не влияет, чем влияет. Лучше не забивать этим голову. Оно не для перфоманса было сделано. Обычно узкие места в совсем иных местах. Вот тут пишут, что делали тест и влияния на производительность не зафиксировано:
Но тесты на производительность очень тонкая материя. Доверять этим выводам или нет - решать вам. К тому же оптимизации могут отличатся в разных реализациях java-машины.
Типичное использование модификатора final
на классе хоть как-то обосновано лишь в случае утилитных классов (аля хэлперы). Ибо по факту, таким образом мы запрещаем наследование, которое, к слову, бессмысленно при наличии одних лишь статических методов и приватного конструктора. Т.е. это скорее подсказка людям, использующим этот класс, что он - stateless и это сделано by design.
В случае с тестами, чисто в теории, наследование может иметь смысл при частном случае расширения какой-то области тестирования. Но это скорее логическое разделение, и то же самое можно обыграть на уровне пакетов.
В общем, использовать final
на тестовых классах можно, но практического смысла в этом мало. И это скорее вызовет уйму вопросов у ревьюверов: мол, зачем?
Eсли это еще и ui тесты то оптипизациями на уровне синтаксиса вобще забейте. Вон в Селениуме в основной либе три обращения к апи драйвера при проверке тега элемента, в SelectElement классе, вот про такие оптимизации нужно думать)
уже пофиксили)
На скорость компиляции и производительность не повлияет. Если у вас будет миллион final
классов и 10 миллионов инстансов этих классов скорость компиляции, загрузки классов, работы с отражениями и объектами по сравнения с открытыми классами не будет.
final
повлияет на архитектуру приложения и безопасность.
На основании советов из Эффективное програмирование на Java
нужно максимально ограничивать ваш класс, то есть использовать final
и открывать для наследования, только если вы уверены в безопасности наследования. Хотя для тестовых классов, которые будет расширять максимум один человек абсолютно не важно final
он или нет.