在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()之间的上下文?糟糕。看起来问题与我不同。祝你好运。