我正在尝试测试我的自定义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的原因。