我正在使用机器人电气框架来测试我的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()
方法中的逻辑流。
将机器人升级到版本2。X解决了问题!在0.9版本中。这是他们网站上的默认版本,它是不适用的!
因此,它可以这样改编:
Locale loc = new Locale("desired language/country");
Configuration c = new Configuration();
c.setLocale(loc);