Существует также более «корпоративный» подход, который можно использовать там, где доступно внедрение зависимостей (как в EJB, Spring и т. Д.).
Вы можете определить интерфейс, например TimeService, и добавить метод e, который возвращает текущую дату.
public interface TimeService {
Date getCurrentDate();
}
Вы можете реализовать это для возврата new Date()
и использовать его так:
gebruiker.setLastLogin(timeService.getCurrentTime());
Очевидно, что это будет очень легко проверить, потому что вы можете высмеивать TimeService
. Используя EasyMock (просто пример), это может быть:
Date relevantDateForTest = ...
expect(timeService.getCurrentTime()).andReturn(relevantDateForTest);
replay(timeService);
Использование TimeService
во всем коде и никогда не использование new Date()
- довольно хорошая практика, а также имеет другие преимущества. Я нашел это полезным в ряде случаев, включая ручное функциональное тестирование функций, которые будут активированы в будущем. Более того, системное время может быть получено из внешней системы, что делает его согласованным по кластерам и т. Д.