簡體   English   中英

robolectric測試:無法獲取語言環境

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM