Я пытаюсь изменить значение, возвращаемое System.currentTimeMillis(), поэтому я могу выполнять такие операции, как: записать что-то в базу данных, имитировать ожидание 5 минут, выполнить запрос на базы данных (запрос зависит от того, когда это значение записано).Robolectric 3.0: Mocking System.currentTimeMillis()
код предложенный в [это SO нить]:
ShadowSystemClock shadowClock = Robolectric.shadowOf(SystemClock.class);
shadowClock.setCurrentTimeMillis(1424369871446);
не компилируется, так как метод shadowOf был удален. Trying альтернативы, как:
ShadowSystemClock shadowClock = new ShadowSystemClock();
shadowClock.setCurrentTimeMillis(1424369871446);
Оказывается были issues with overriding currentTimeMillis(), но эти вопросы должны быть исправлены в версии 3.0.
Я мог бы добавить PowerMock в свой проект и использовать это для этого случая, я думаю, но если это возможно с Robolectric, я бы предпочел это.
Обновление: Подойдет ближе, но может что-то упустить. Этот код:
ShadowSystemClock shadowClock = new ShadowSystemClock();
Log("system = " + System.currentTimeMillis() + "; shadow = " + shadowClock.currentTimeMillis() + "; time from code = " + Code.getSystemTime());
shadowClock.setCurrentTimeMillis(50000000L);
Log("system = " + System.currentTimeMillis() + "; shadow = " + shadowClock.currentTimeMillis() + "; time from code = " + Code.getSystemTime());
Выходы это:
system = 1438212006879; shadow = 0; time from code = 1438212006894
system = 1438212006898; shadow = 50000000; time from code = 1438212006898
Code.getSystemTime() звонит в кодовую испытывается. Метод просто возвращает System.currentTimeMillis().
Кажется, что все может работать, если ShadowSystemClock перехватил вызовы currentTimeMillis(). Есть ли способ сделать это?
Вы можете поделиться своим мнением? используя Roboeletric или PowerMock? –