在AndroidTestCase中设置自定义上下文

在AndroidTestCase中设置自定义上下文,android,unit-testing,android-contentprovider,android-context,android-testing,Android,Unit Testing,Android Contentprovider,Android Context,Android Testing,我正在尝试测试我的自定义ContentProvider,它只在某个时间点更新一个项目 为了测试shouldUpdate分支,我需要在应用程序中恢复时间并设置自定义日期。我无法删除System.currentTimeMillis(),所以我在我的应用程序对象中放了一个方法,我正试图在AndroidTestCase中设置context(),如下所示 private void setContextDate(final Date myCustomDate){ final Context base

我正在尝试测试我的自定义
ContentProvider
,它只在某个时间点更新一个项目

为了测试
shouldUpdate
分支,我需要在应用程序中恢复时间并设置自定义日期。我无法删除
System.currentTimeMillis()
,所以我在我的应用程序对象中放了一个方法,我正试图在
AndroidTestCase
中设置context(),如下所示

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、 我知道ProviderTestCase2,但我也在访问我的提供者中的SharedReference,对于这些ProviderTestCase2,返回null。这就是我使用AndroidTestCase的原因。

我观察到AndroidTestCase在设置其基础应用程序上下文之前有一个明显的延迟(请参阅)。该延迟可能会导致AndroidTestCase在设置上下文后初始化其上下文。@cdhabecker我在
setUp()中调用
setContextDate()
之后,我测试它是否返回正确的应用程序上下文,它会返回正确的应用程序上下文。只有当它运行实际的测试时,它才会返回不同的应用程序上下文,而该上下文不会被覆盖。它正在更改setup()和test()之间的上下文?糟糕。看起来问题与我不同。祝你好运。