2013-04-14 31 views
0

我正在使用robolectric框架來測試我的android項目。它工作得很好,但我怎麼也找不到解決問題:Robolectric測試:無法獲取區域

在我的活動課,我必須考慮當前的語言如下:

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); .... 

有沒有人有一個想法是什麼問題,它是如何解決的?

回答

0

將robolectric更新到版本2.x可解決問題!在他們網站上的默認版本0.9.x版本中,它不適用!

因此,可以適於以這種方式:

Locale loc = new Locale("desired language/country"); 
Configuration c = new Configuration(); 
c.setLocale(loc); 
1

由於未設置語言環境字段,因此您正在獲得NPE。如果在實例化對象之後調試並在線上放置斷點,請注意加載的實際類。你會看到它不是Configuration,它是ShadowConfiguration

您可以查看這裏的源:https://github.com/pivotal/robolectric/blob/master/src/main/java/org/robolectric/shadows/ShadowConfiguration.java

我假設(沒有實際運行的代碼)getResources().getConfiguration()要麼返回null,或者沒有設置語言環境。 ShadowConfiguration中有一個setLocale方法,您可以在測試中設置該方法來操作setCurrentLanguageChoosenInRadioGroup()方法中的邏輯流程。

+0

遺憾的反應後期。你是對的,getResources()。getConfiguration()也是null。在我看到你的答案後,我也嘗試使用ShadowConfiguration,但可能它不是真正的使用方式。我剛剛創建了一個影子對象並對其進行了初始化。你能解釋一下如何使用它嗎?例如,在這種情況下。 – Asqan