将@Config与语言限定符一起使用时,区域设置不正确。 Robolectric 2.3

时间:2014-11-07 07:38:45

标签: robolectric

我想使用robolectric 2.3测试语言环境文件。我有两个locales en(默认情况下)和sv。 我尝试过使用下一个版本:

//1
@Config(qualifiers = "sv")
public void testSVLocalization() {
   Locale.setDefault(new Locale ("sv", "SV"));
   configuration.locale = Locale.getDefault();
   assertThat(configuration.locale).isEqualTo(new Locale ( "sv", "SV"));

   String tabSettingsStr = new MainActivity().getResources().getString(R.string.tab_settings);
   assertEquals(tabSettingsStr, "INSTÄLLNINGAR");
}

//2
...
Locale locale = new Locale("sv", "SV");
Robolectric.shadowOf( startAppActivity.getApplicationContext().getResources().getConfiguration() ).setLocale( locale );
Locale.setDefault( locale );
...

//3
@Config(qualifiers = "sv")
public void testSVLocalization() {
Locale locale = resources.getConfiguration().locale;
...}

我也试过了@Config(reportSdk = 20, emulateSdk = 20)等等。所有这些方法都设置了区域设置,当我检查它时,它会显示sv,但是在这个字符串上assertEquals(tabSettingsStr, "INSTÄLLNINGAR");我有一个错误{{ 1}}因为这个字符串取自英文本地化文件。

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

好的,您似乎遇到了此问题中描述的内容: https://github.com/robolectric/robolectric/issues/635

基本上,@ Config的使用会影响您在测试中直接加载资源的方式,但不会影响应用程序的活动加载这些资源的方式。 要更改活动的区域设置,请在测试之前使用该活动的资源执行以下操作。这应该允许它拾取正确的字符串:

Robolectric.shadowOf(resources.getConfiguration()).setLocale(locale);