Основным недостатком IMO является невозможность, с использованием большинства фреймворков, насмехаться над реализацией таких служебных методов, чтобы выполнить юнит-тестирование некоторого класса с помощью этих служебных методов.
Например, Использование System.currentTimeMillis()
легко узнать текущее время.Но когда вам нужно протестировать класс, который использует текущее время для выполнения какой-либо работы, невозможно смоделировать метод, чтобы он возвращал определенный момент времени.Использование объекта, реализующего интерфейс Clock
и введенного в объект для тестирования, значительно облегчает это: вы можете создать фиктивную реализацию Clock, возвращающую определенную дату, когда вас попросят получить текущее время.