Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 机器人测试:无法获取区域设置_Java_Android_Unit Testing_Robolectric_Android Testing - Fatal编程技术网

Java 机器人测试:无法获取区域设置

Java 机器人测试:无法获取区域设置,java,android,unit-testing,robolectric,android-testing,Java,Android,Unit Testing,Robolectric,Android Testing,我正在使用robolectric框架测试我的android项目。它工作得很好,但我找不到解决问题的方法: 在我的活动课上,我必须学习以下当前语言: private void setCurrentLanguageChoosenInRadioGroup() { Configuration c = new Configuration(getResources().getConfiguration()); String locale = c.locale.getLanguage();

我正在使用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,因为没有设置区域设置字段。如果在实例化
配置
对象后调试并在行上放置断点,请注意实际加载的类。您将看到它不是
配置
,而是
阴影配置

您可以在此处查看源代码:


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

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

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

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

抱歉反应太晚。您是对的,getResources().getConfiguration()也是空的。在我看到你的答案后,我也尝试过使用阴影配置,但这可能不是真正的使用方式。我刚刚创建了一个阴影对象并初始化了它。你能解释一下如何使用它吗?例如,在这种情况下。