unit tests
Технически - нет, не нужно. До всего можно добраться. В крайнем случае модифицируя байт-код агентом (см. PowerMock).
А вот практически приходится. У нас были тесты, проверявшие права доступа. И чтобы переинициализировать (очистить после теста) классы, которые тестами затрагивались, приходилось что-то около 10-15 статических полей то в null то в 0 то в false сбрасывать. И каждый раз, когда классы менялись (то просто поле переименуют, то его в другой класс перенесут, то вообще удалят), сыпались тесты => выкатывать изменения нельзя.
Договорились что в двух классах будут protected методы junitReset(), а наши тесты будут их вызывать. После этого, при таких же изменениях как и раньше, сразу вылетает ошибка компиляции в junitReset(), его правят и тесты работают как и раньше.
Теперь от этих полей избавились, осталось 2, но метод убирать не хотят. Говорят нам проще с ним, чем время от времени в ошибках тестов разбираться.