0

我正在使用 robolectric 框架来测试我的 android 项目。它工作得很好,但我找不到解决问题的方法:

在我的活动课上,我必须采用以下当前语言:

private void setCurrentLanguageChoosenInRadioGroup() {
    Configuration c = new Configuration(getResources().getConfiguration());
    String locale = c.locale.getLanguage();

    if(locale.equalsIgnoreCase(Constants.DUTCH_LANGUAGE)){          
        radioLanguageGroup.check(dutchButton.getId());
    }
    else if(locale.equalsIgnoreCase(Locale.FRENCH.getLanguage())){
        radioLanguageGroup.check(frenchButton.getId());
    }
    else if(locale.equalsIgnoreCase(Locale.ENGLISH.getLanguage())){
        radioLanguageGroup.check(englishButton.getId());
    }
}

但在“c.locale.getLanguage();”这一行 我得到空指针异常。这是我的测试方法:

public void setUp() throws Exception {
    activity = new MainActivity();
    activity.onCreate(null); ....

有谁知道问题是什么以及如何解决?

4

2 回答 2

1

您正在获得 NPE,因为未设置区域设置字段。如果在实例化Configuration对象后调试并在行上放置断点,请注意加载的实际类。你会看到它不是Configuration,它是ShadowConfiguration

您可以在此处查看源代码:https ://github.com/pivotal/robolectric/blob/master/src/main/java/org/robolectric/shadows/ShadowConfiguration.java

我假设(没有实际运行您的代码)getResources().getConfiguration()返回 null,或者没有设置语言环境。ShadowConfiguration 中有一个 setLocale 方法,您可以在测试中设置该方法来操作setCurrentLanguageChoosenInRadioGroup()方法中的逻辑流。

于 2013-04-14T04:16:25.907 回答
0

将 robolectric 更新到 2.x 版本可以解决问题!在他们网站上的默认版本 0.9.x 中,它不适用!

因此,它可以通过这种方式进行调整:

Locale loc = new Locale("desired language/country");
Configuration c = new Configuration();
c.setLocale(loc);
于 2013-05-29T14:57:54.083 回答