1

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 を使用しています。

4

0 に答える 0