2012-03-17 13 views
43

Acabo de empezar a utilizar 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.Proporcionando datos de prueba para SharedPreferences para Robolectric

Tengo dos casos de prueba

  1. Actividad espera un nuevo SharedPreferences/vacíos

  2. Actividad espera SharedPreferences con algunos datos que ya

Para el caso de prueba 1, la 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.

Parece un caso de uso muy común, pero parece que no puedo entender cómo hacerlo.

Respuesta

54

Descubrí cómo - parece tan obvio ahora!

Para aquellos que estén interesados, solo obtenga las Preferencias compartidas y rellene con los datos requeridos.

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

Si usted tiene un SharedPreferences personalizados, usted debería ser capaz de hacer esto (en realidad no han probado adecuadamente, sino que también debe trabajar)

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

Hope ese alguien ha ayudado :)

+1

1, esto me ayudó mucho! (el segundo funciona perfecto) Estoy usando esto para evitar iniciar tareas asíncronas en el modo de prueba estableciendo un booleano "is test mode" en las preferencias compartidas. – Jimmy

+0

sugerencia: en el código bajo prueba que llama a getSharedPreferences, asegúrese de estar utilizando el contexto de la aplicación; de lo contrario, esto no funcionará. –

+1

@Jimmy prefiero lograr esto mediante el uso de campos personalizados de configuración de compilación ver: http://michiganlabs.com/string-constants-generated-gradle-build-configurations – martyglaubitz

15

La respuesta aceptada que he votado es correcta, por supuesto. Las cosas han cambiado ligeramente si está utilizando Robolectric 3

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

A continuación, puede añadir una preferencia como de costumbre

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

Robolectric solución 3,1 instantánea que funciona para mí ... y pueden trabajar para usted

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

utilizo este fragmento de código sólo para probar el wifi

Cuestiones relacionadas