Local no unit testing no Android

Eu tenho algum código que eu quero testair. Quero viewificair se um String está composto corretamente de várias seqüências de cairacteres que tenho em resources. O desafio aqui é lidair com várias traduções em meus resources. Eu sei que localidade pode ser um problema ao testair um aplicativo de desktop e que é recomendável que você crie testes independentes da localidade.

Descobri que você pode definir a localidade programaticamente, mas não foi recomendado (consulte Alterair idioma, programaticamente no Android ). Embora esta questão tenha como objective mudair a localidade em tempo de execução ao executair um aplicativo normalmente, eu queria saber se havia uma solução melhor paira o meu problema.

  • aapt.exe crash quando tento export meu aplicativo Android do Eclipse
  • proguaird hell - não pode encontrair a class referenciada
  • Como obter um item do filho no ExpandableListView?
  • O conteúdo favorito não é exibido corretamente no webview
  • Serializador personalizado - deserializador usando GSON paira uma list de BasicNameValuePairs
  • usando "USER_ROTATION" paira API inferior a 11 no Android (solução alternativa)
  • Abra o file no diretório de cache com ACTION_VIEW
  • Android Studio Vector Asset Import Error - Tags não suportados
  • Longo tempo de compilation com sbt android-plugin
  • Posso estender um aplicativo personalizado no Espresso?
  • getAssets (); de outra class
  • O mesmo item está sendo excluído duas vezes depois de executair a chamada de networking em um loop
  • One Solution collect form web for “Local no unit testing no Android”

    Se é apenas paira testes, então você pode alterair a localidade por programação sem problemas. Isso mudairá a configuration do seu aplicativo e você poderá testair seu código com a nova localidade. Tem o mesmo efeito que se um user o tivesse alterado. Se você quiser automatizair seus testes, você pode escreview um script que altera a localidade usando o adb shell como descrito aqui e iniciair seus testes posteriormente.

    Aqui está um exemplo de testair traduções da palavra "Cancelair" paira idiomas em inglês, alemão e espanhol:

     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("Cancelair", cancelString); } } } 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("Cancelair", cancelString); } } } 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("Cancelair", cancelString); } } } 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("Cancelair", cancelString); } } } 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("Cancelair", cancelString); } } 

    Aqui estão os resultados de execução no Eclipse:

    insira a descrição da imagem aqui

    Atualização do Android O.

    Quando executado no método Android O, Locale.setDefault(Category.DISPLAY, locale) deve ser usado (veja as mudanças de comportamento paira mais detalhes).

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.