Я пытаюсь протестировать свой пользовательский ContentProvider
, который обновляет элемент только в определенный момент времени.
Чтобы проверить ветку shouldUpdate
, мне нужно отменить время и установитьпользовательская дата в моем приложении.Я не смог заглушить System.currentTimeMillis()
, поэтому я поместил метод в свой объект Application, и я пытаюсь setContext()
in AndroidTestCase
вот так.
private void setContextDate(final Date myCustomDate){
final Context baseContext = getContext();
final ContentResolver contentResolver = baseContext.getContentResolver();
final MyApplication myApp = new MyApplication() {
@Override
public long currentTimeMillis(){
return myCustomDate.getTime();
// This normally returns System.currentTimeMillis();
}
@Override
public Context getBaseContext(){
return baseContext;
}
@Override
public ContentResolver getContentResolver(){
return contentResolver;
}
};
ContextWrapper contextWrapper = new ContextWrapper(baseContext) {
@Override
public Context getApplicationContext(){
return myApp;
}
};
setContext(contextWrapper);
}
Однако, когда я вызываю getApplicationContext().currentTimeMillis()
в моем провайдере, он возвращает реальную реализацию метода, которая является System.currentTimeMillis()
, а не моим пользовательским временем даты, которое я установил в AndroidTestCase
.
Чтоя делаю не так?
ps Я знаю о ProviderTestCase2, но я также обращаюсь к SharedPreferences в моем провайдере, и для тех ProviderTestCase2 возвращает ноль.Вот почему я использую AndroidTestCase.