Java 机器人测试:无法获取区域设置
我正在使用robolectric框架测试我的android项目。它工作得很好,但我找不到解决问题的方法: 在我的活动课上,我必须学习以下当前语言: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();
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()也是空的。在我看到你的答案后,我也尝试过使用阴影配置,但这可能不是真正的使用方式。我刚刚创建了一个阴影对象并初始化了它。你能解释一下如何使用它吗?例如,在这种情况下。