Я бы скорее попытался скрыть эту функциональность за симулируемым интерфейсом, чтобы «реальная» реализация получала системную дату, а ваша фиктивная реализация возвращает любую дату, которую вы настроили.
Неразбериха с системной датой в модульных тестах звучит не очень хорошо для меня - я постараюсь избежать этого, если смогу. Модульные тесты должны быть как можно более независимыми от контекста, что в долгосрочной перспективе избавляет от многих проблем.
Однако, если вы не можете изменить код, который вы тестируете, у вас может не быть другого пути. Тогда возникает вопрос: вас интересует только дата или полная отметка времени? Последний случай звучит для меня довольно безнадежно (каким-либо иным способом, кроме описанного выше макета интерфейса), так как я предполагаю, что простого сброса даты перед запуском тестов недостаточно - вам нужно фиксированный момент времени, чтобы его можно было вернуть по всему устройству. тесты. Может быть, ваши тесты выполняются достаточно быстро, чтобы закончить до того, как тикают часы, а может и нет - возможно, они пройдут прямо сейчас, а затем начнут случайно проваливаться через некоторое время после добавления следующего теста: - (
Если вам нужна только дата, вы можете попробовать изменить дату в методе @BeforeClass
, а затем сбросить ее в @AfterClass
, хотя это и брутто.