Android上的unit testing期间的区域设置

我有一些我想testing的代码。 我想检查一个string是否是由我在资源中的各种string组成的。 这里面临的挑战是在我的资源中处理多个翻译。 我知道在testing桌面应用程序时区域设置可能会成为问题,build议您创build与区域无关的testing。

我发现你可以以编程方式设置区域设置,但不推荐使用(请参阅在Android中以编程方式更改语言 )。 虽然这个问题的目的是在正常运行应用程序时在运行时更改语言环境,但我想知道是否有更好的解决scheme来解决我的问题。

Solutions Collecting From Web of "Android上的unit testing期间的区域设置"

如果只是为了testing,那么你可以通过编程来改变语言环境,而不会有任何问题。 它会改变你的应用程序的configuration,你将能够用新的语言环境来testing你的代码。 它具有与用户更改相同的效果。 如果你想自动化你的testing,你可以写一个脚本来改变使用adb shell语言环境,如下所述 ,然后启动你的testing。

以下是testing英语,德语和西class牙语区域设置单词“取消”的翻译示例:

 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); } } 

以下是Eclipse中的执行结果:

在这里输入图像说明

Android O更新。

在Android O方法中运行时Locale.setDefault(Category.DISPLAY, locale)应使用Locale.setDefault(Category.DISPLAY, locale) (请参阅行为更改以获取更多详细信息)。