Установите пользовательский контекст в AndroidTestCase - PullRequest
1 голос
/ 19 июля 2011

Я пытаюсь протестировать свой пользовательский 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.

...