Mock Instant.now () без снятия Clock в Конструкторе или без Clock Object - PullRequest
0 голосов
/ 21 марта 2019

У меня есть код ниже в одном из моих методов -

ZonedDateTime current = Instant.now().atZone(ZoneId.of(AMERICA_NEW_YORK));

Я хочу высмеять current в тесте junit.

Я пытался с java.time.Clock, но для этого мне нужно добавить его в конструктор класса, так как мой код записан в старых версиях Spring и при использовании конфигурации на основе xml этот класс вызывает проблему, потому что он требует аргумент конструктора в application-context.xml файл, если я использую конструктор с Clock.

Есть ли способ избежать конфигурации конструктора и макета current в приведенном выше коде.

Обновление

Согласно комментариям Павла Смирнова, я попробовал ниже, но current все еще возвращает сегодняшнюю дату, но не ту, над которой я издеваюсь.

ZonedDateTime exactOneDay = ZonedDateTime.parse("Sun Oct 21 12:30:00 EDT  2018", Parser); 
    doReturn(exactOneDay).when(spyEmployeeHelper).getCurrentTime();
    employee = getEmployees().get(0);
    assertEquals(Integer.valueOf(1), employee.getNoticePeriod());

1 Ответ

2 голосов
/ 22 марта 2019

Вы можете объявить функцию, которая возвращает ZoneDateTime:

public ZoneDateTime getCurrentTime () {
    return Instant.now().atZone(ZoneId.of(AMERICA_NEW_YORK));
}

и присвоить результат этой функции в поле current:

ZonedDateTime current = getCurrentTime();

Теперь вы можете простозамените его на желаемое значение, используя Mockito framework :

doReturn(yourValue).when(yourObject).getCurrentTime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...