Locales durante la prueba de unidad en Android

Tengo un código que quiero probar. Quiero comprobar si una cadena está compuesta correctamente de varias cadenas que tengo en recursos. El desafío aquí es tratar con múltiples traducciones en mis recursos. Sé que la configuración regional puede ser un problema al probar una aplicación de escritorio y que se recomienda que cree pruebas independientes de la configuración regional.

He encontrado que puede establecer la configuración regionalmente, pero no se recomienda (consulte Cambiar idioma mediante programación en Android ). Si bien esta pregunta está dirigida a cambiar el entorno local en tiempo de ejecución cuando se ejecuta una aplicación normalmente, me preguntaba si había una mejor solución a mi problema.

Si sólo es para realizar pruebas, puede cambiar el entorno de programación de forma programática sin ningún problema. Cambiará la configuración de su aplicación y podrá probar su código con la nueva configuración regional. Tiene el mismo efecto que si un usuario lo hubiera cambiado. Si desea automatizar sus pruebas, puede escribir una secuencia de comandos que cambie la configuración regional utilizando el adb shell tal como se describe aquí , y ejecute las pruebas posteriormente.

A continuación, se muestra un ejemplo de prueba de las traducciones de la palabra "Cancel" para los entornos locales en inglés, alemán y español:

 public class ResourcesTestCase extends AndroidTestCase { private void setLocale(String language, String country) { Locale locale = new Locale(language, country); // here we update locale for date formatters Locale.setDefault(locale); // here we update locale for app resources Resources res = getContext().getResources(); Configuration config = res.getConfiguration(); config.locale = locale; res.updateConfiguration(config, res.getDisplayMetrics()); } public void testEnglishLocale() { setLocale("en", "EN"); String cancelString = getContext().getString(R.string.cancel); assertEquals("Cancel", cancelString); } public void testGermanLocale() { setLocale("de", "DE"); String cancelString = getContext().getString(R.string.cancel); assertEquals("Abbrechen", cancelString); } public void testSpanishLocale() { setLocale("es", "ES"); String cancelString = getContext().getString(R.string.cancel); assertEquals("Cancelar", cancelString); } } 

Estos son los resultados de ejecución en Eclipse:

Introduzca aquí la descripción de la imagen

Actualización de Android O.

Cuando se ejecute en el método de Android O, se Locale.setDefault(Category.DISPLAY, locale) (consulte los cambios de comportamiento para obtener más detalles).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.