[英]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.