Я пытаюсь протестировать свой собственный ContentProvider
, который обновляет элемент только в определенный момент времени.
Чтобы протестировать ветку shouldUpdate
, мне нужно вернуть время и установить пользовательскую дату в моем приложении. Я не мог заглушить System.currentTimeMillis()
, поэтому я поместил метод в свой объект приложения и пытаюсь setContext()
в 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
.
Что я делаю неправильно?
p.s. Я знаю о ProviderTestCase2, но я также обращаюсь к SharedPreferences в своем провайдере, и для них ProviderTestCase2 возвращает значение null. Вот почему я использую AndroidTestCase.
setContextDate()
вsetUp()
и после этого проверяю, возвращает ли он правильный контекст приложения, что он и делает. Только когда он запускает фактический тест, он возвращает другой контекст приложения, который не переопределяется. - person siamii   schedule 19.07.2011