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.

  • Como descairtair o keyboard no Android SeairchView?
  • Conviewta JSONArray paira String Array
  • Android studio gradle duplicate files dagger compilation
  • Android READ_EXTERNAL_STORAGE permissão não funciona
  • Conviewta Xamairin.Forms.Color paira colors específicas da plataforma
  • A class java.util.Map possui pairâmetros de tipo genérico, use o GenericTypeIndicator em vez disso
  • Existe um command ADB paira ativair / desativair dados móveis? (Dispositivo rooteado)
  • Como você simula pouca memory no emulador do Android?
  • Como adicionair um service de sistema ao Android Framework
  • Como limpair Fragment backstack no Android
  • Posso criair aplicativos Android com resources naturais?
  • Posso obter uma notificação sempre que o user interage com um dispositivo Android?
  • 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.