Здесь я вижу два пути.
Либо создайте фабричный класс DateUtils
, который инкапсулирует конструкцию экземпляров Calendar
и Date
. Тогда вы можете поменять это на контролируемую фабрику. То есть, у вас есть вторая реализация DateUtils
, которая также предоставляет метод setCurrentTime
, а затем будет явно возвращать Calendar
экземпляров, установленных на эту дату.
Или вы можете использовать JMockit, чтобы фактически «переопределить» ваш вызов new GregorianCalendar
, поэтому вместо этого возвращается ложный экземпляр. Я сам этого не делал, но здесь есть описание .
Ваша опция, разбивающая метод на два метода, также является совершенно допустимой. Я думаю, что это то, что делает большинство людей, в том числе и я, но правда в том, что это вредит вашему дизайну, особенно если класс подвергается воздействию другого кода.