繁体   English   中英

robolectric测试:无法获取语言环境

[英]Robolectric Testing: can not get the locale

我正在使用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()方法中的逻辑流程。

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

因此,可以通过以下方式进行调整:

Locale loc = new Locale("desired language/country");
Configuration c = new Configuration();
c.setLocale(loc);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM