在AndroidTestCase中设置自定义上下文

时间:2011-07-19 16:58:38

标签: android unit-testing android-contentprovider android-context android-testing

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

为了测试shouldUpdate分支,我需要在我的应用程序中恢复时间并设置自定义日期。我无法删除System.currentTimeMillis(),因此我在我的Application对象中添加了一个方法,并且我正在尝试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的原因。

0 个答案:

没有答案