我正在使用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();”行中我得到nullpointerexception。这是我的测试方法:

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


是否有人知道问题出在哪里,如何解决?

最佳答案

您正在获得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()方法中的逻辑流程。

关于java - robolectric测试:无法获取语言环境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15994982/

10-13 03:25