我正在使用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/