Предоставление тестовых данных для SharedPreferences для Robolectric
Просто начал использовать Robolectric, и, похоже, это в значительной степени то, что мне нужно. Тем не менее, я ударил немного дорожного знака в отношении использования SharedPreferences.
У меня есть два теста:
-
Ожидается, что новый/пустой sharedPreferences
-
Ожидается, что sharedPreferences с некоторыми данными в нем уже
В тестовом примере 1 тесты проходят так, как ожидалось, так что все хорошо:)
Однако для тестового примера 2 я, похоже, не могу найти хороший способ предоставить Robolectric некоторые поддельные данные, поэтому Activity сможет получить доступ к этим поддельным данным.
Это похоже на очень распространенный случай использования, но я не могу понять, как это сделать!
Ответы
Ответ 1
Узнал, как - кажется, сейчас так очевидно!
Для тех, кто заинтересован, вы просто получаете sharedPreferences и заполняете его необходимыми данными.
SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext());
sharedPreferences.edit().putString("testId", "12345").commit();
Если у вас есть пользовательские SharedPreferences, вы должны быть в состоянии сделать это (не очень хорошо протестировали, но также должны работать)
SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("testId", "12345").commit();
Надеюсь, это помогло кому-то:)
Ответ 2
Принятый ответ, который я проголосовал, конечно, прав. Что-то изменилось, если вы используете Robolectric 3
SharedPreferences sharedPreferences =
RuntimeEnvironment.application.getSharedPreferences(
"you_custom_pref_name", Context.MODE_PRIVATE);
Затем вы можете добавить предпочтение как обычно
sharedPreferences.edit().putBoolean(
activity.getString(R.string.pref_somepref), true).commit();
Ответ 3
Решение Robolectric 3.1 SNAPSHOT, которое работает для меня... и может работать для вас
Context context = RuntimeEnvironment.application.getApplicationContext();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit();
Я использую этот фрагмент кода для тестирования только на wifi