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
。
私は何を間違っていますか?
ps ProviderTestCase2 については知っていますが、プロバイダーの SharedPreferences にもアクセスしているため、ProviderTestCase2 は null を返します。そのため、私は AndroidTestCase を使用しています。