Мне нужно иметь возможность подделать системное время при тестировании. У источника, который у меня есть, используется java.time.LocalDate. Есть ли способ сделать LocalDate.now()
возврат заранее установленной даты?Как мне подделать дату, возвращенную java.time.LocalDate?
ответ
Имеется несколько вариантов:
Оберните вызов
LocalDate.now()
в нестационарный метод класса. Затем вы можете издеваться над этим методом, чтобы вернуть свой конкретный экземпляр. Это не выглядит практичным, если вы вызываете методLocalDate.now()
во многих местах вашего кода.Используйте метод
LocalDate.now(Clock)
, это довольно удобно для тестирования, как уже было предложено в комментариях - вам снова нужно изменить код приложения.Используйте
Powermockito
, если можно. В этом случае вы довольно легко подходите, издеваясь над статическими методами, используя методmockStatic(Class<?>)
.
3-й подход может быть реализован как:
@PrepareForTest({ LocalDate.class })
@RunWith(PowerMockRunner.class)
public class DateTest {
@Test
public void yourTest() {
PowerMockito.mockStatic(LocalDate.class);
when(LocalDate.now()).thenReturn(yourLocalDateObj);
}
}
Возможно, вам нужно включить класс в список подготовленных: '@PrepareForTest ({MyFooService.class, LocalDate.class})' –
Можете ли вы зависеть от времени вводить время через конструктор/параметр кода?
В противном случае вы можете обернуть LocalDate.now() в статическом классе, который позволяет вам скорректировать значение для тестирования.
Обычно я предлагаю использовать Mockito, но поскольку метод статичен, вы не можете действительно издеваться над объектом.
Почему бы не некоторые «DateProvider» Класс захватить дату вас
public class DateProvider{
public LocalDate getNow(){
return LocalDate.now();
}
}
и использовать его таким образом:
new DateProvider().getNow();
Что бы сделать это довольно легко проверить с любым возвращаемым значением LocalDate
Нет необходимости спагетти кода здесь: держать его просто! Напишите удобный способ и смените его тело в соответствии с вашими потребностями.
public static LocalDate getCurrentTime() {
// You can comment right code to save it during debugging
}
Я пытался код на этой странице, но я заметил, что я должен получить LocalDate экземпляр первого, прежде чем использовать PowerMockito как 2 firstLines следующего кода
@Test
public void testYearOptions() throws Exception{
LocalDate date = LocalDate.of(2015,11,12);
PowerMockito.mockStatic(LocalDate.class);
Mockito.when(LocalDate.now()).thenReturn(date);
Map<String, String> semesterMap = Utilities.getYears(); //Your function where LocalDate is Uses
assertNotNull(yearsMap.get("2015"));//your assertion
}
Для тестирования:
@RunWith(SpringRunner.class)
@SpringBootTest
public class DateTimeFactoryTest {
private static final Logger log = LoggerFactory.getLogger(DateTimeFactoryTest.class);
@MockBean
DateTimeFactory dateTimeFactory;
@Test
public void test001() throws MissingMethodInvocationException {
given(dateTimeFactory.getLocalDate()).willReturn(LocalDate.of(2017,4, 4));
LocalDate ld = dateTimeFactory.getLocalDate();
}
}
- 1. Настроить дату, возвращенную методом getDate()
- 2. Как мне подделать ошибку проверки?
- 3. Как мне подделать/подделать объект сеанса в веб-форматах ASP.Net?
- 4. Преобразовать возвращенную строку (YYYYMMDD) на дату
- 5. JPA EclipseLink PostgreSQL Вставить java.time.LocalDate как java.sql.Date вставляет неверную дату
- 6. Как исправить дату, возвращенную как 1970-01-01?
- 7. Git: Можно ли подделать дату подписания тега?
- 8. java.time.LocalDate to java.util.Date
- 9. javascript date java.time.LocalDate
- 10. Как мне установить дату?
- 11. Как мне отформатировать дату
- 12. Как сравнить дату, возвращенную из БД, на дату (строка или иначе)?
- 13. Как мне подделать/подделать/заменить/заглушить базовый класс при единичном тестировании на C#?
- 14. Как сопоставить java.time.LocalDate с Orika?
- 15. JSTL formatDate и java.time.LocalDate
- 16. Как подделать хэш-индекс?
- 17. Как подделать список SharePoint (мне нужен IEnumerable <Microsoft.SharePoint.Client.ListItem>)?
- 18. Как мне подделать атрибуты стиля C# в Ruby?
- 19. Преобразование java.time.LocalDate в java.util.Date
- 20. Slick 3 java.time.LocalDate mapping
- 21. Как мне получить текущую дату?
- 22. Как мне отформатировать дату Javascript?
- 23. Как подделать EntityFramework.Extended FutureQuery?
- 24. Как подделать местоположение iOS
- 25. Как подделать Http-сообщение?
- 26. Есть ли способ подделать дату посещения браузера с помощью PhantomJS?
- 27. Может ли $ _SERVER ['SERVER_NAME'] подделать/подделать?
- 28. Как мне добавить дату в строку, чтобы этот запрос выполнялся?
- 29. Как освободить возвращенную строку malloced?
- 30. Получите ошибку, возвращенную FFMPEG
Создайте метод обёртки для вызовов в «LocalDate.now» и пусть он вернет ваши значения, если вы в тестовом примере. –
Существует перегрузка LocalDate.now, которая принимает часы. Можете ли вы использовать это? –
Вам действительно нужно вводить часы, а не пытаться подделать системное время. –