Подтвердить что ты не робот

Предоставление тестовых данных для SharedPreferences для Robolectric

Просто начал использовать Robolectric, и, похоже, это в значительной степени то, что мне нужно. Тем не менее, я ударил немного дорожного знака в отношении использования SharedPreferences.

У меня есть два теста:

  • Ожидается, что новый/пустой sharedPreferences

  • Ожидается, что sharedPreferences с некоторыми данными в нем уже

В тестовом примере 1 тесты проходят так, как ожидалось, так что все хорошо:)

Однако для тестового примера 2 я, похоже, не могу найти хороший способ предоставить Robolectric некоторые поддельные данные, поэтому Activity сможет получить доступ к этим поддельным данным.

Это похоже на очень распространенный случай использования, но я не могу понять, как это сделать!

4b9b3361

Ответ 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