2015-09-25 2 views
20

В моем тестовом примере мне нужен метод, чувствительный к времени, в этом методе мы используем java 8 class LocalDate, это не Joda.Как я могу mock java.time.LocalDate.now()

Что я могу сделать, чтобы изменить время, когда я бегу тест

ответ

34

В вашем коде замените LocalDate.now() с LocalDate.now(clock);.

Затем вы можете передать Clock.systemDefaultZone() для производства и a fixed clock для тестирования.

+3

Это должен быть принятый ответ! – GedankenNebel

0

Возможно, вы также захотите передать фиксированные часы на производстве (значение которых зафиксировано в начале транзакции), чтобы избежать использования непоследовательных «сейчас» в разных сущностях и запросах. Для получения более подробной информации см. this question.

2

Вы можете реорганизовать свой код, чтобы сделать его удобным для тестирования, например, заменить все вызовы LocalDate.now() с вызовом некоторого метода пользовательского макетируемого нестатического класса.

В качестве альтернативы вы можете использовать PowerMock's mockStatic.