unit tutorial test studio activity java android android-testing robolectric

java - tutorial - Proporcionar datos de prueba para SharedPreferences para Robolectric



robolectric tutorial (3)

Acabo de empezar a usar Robolectric y parece ser más o menos lo que necesito. Sin embargo, me he topado con un obstáculo con respecto al uso de SharedPreferences.

Tengo dos casos de prueba

  1. La actividad espera una nueva / vacía sharedPreferences

  2. La actividad espera que las Preferencias compartidas ya contengan algunos datos

Para el caso de prueba 1, las pruebas están pasando como se esperaba, así que todo bien :)

Sin embargo, para el caso de prueba 2 parece que no puedo encontrar una buena manera de proporcionar a Robolectric algunos datos falsos, por lo que la actividad puede acceder a estos datos falsos.

Se siente como un caso de uso muy común, ¡pero no logro entender cómo hacerlo!


Descubrí cómo - parece tan obvio ahora!

Para aquellos que están interesados, solo obtienes las Preferencias compartidas y las rellena con los datos requeridos.

SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext()); sharedPreferences.edit().putString("testId", "12345").commit();

Si tiene una SharedPreferences personalizada, debería poder hacer esto (realmente no se ha probado correctamente, pero también debería funcionar)

SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE); sharedPreferences.edit().putString("testId", "12345").commit();

Espero que esto haya ayudado a alguien :)


La respuesta aceptada que he votado es, por supuesto, la correcta. Las cosas han cambiado un poco si estás usando Robolectric 3

SharedPreferences sharedPreferences = RuntimeEnvironment.application.getSharedPreferences( "you_custom_pref_name", Context.MODE_PRIVATE);

A continuación, puede agregar una preferencia como de costumbre

sharedPreferences.edit().putBoolean( activity.getString(R.string.pref_somepref), true).commit();


Robolectric 3.1 SNAPSHOT solución que funciona para mí ... y puede funcionar para usted

Context context = RuntimeEnvironment.application.getApplicationContext(); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit();

Uso este fragmento de código solo para probar en wifi