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