2016-09-07 80 views
0

在我的Android應用程序中,我有一個Application類,它擴展了MultiDexApplication。我們稱之爲MyApplicationClassMyApplicationClass.javaonCreate()中,我設置了一些靜態變量。然後在所有活動的onCreate()方法中,我使用靜態方法獲取這些變量。如何在使用Espresso運行活動測試時創建應用程序類

public class MyApplicationClass extends MultiDexApplication { 

    private static String value; 

    public static void setValue(String value) { 
    MyApplicationClass.value = value; 
    } 

    public static String getValue() { 
    return MyApplicationClass.value; 
    } 
} 

現在用咖啡框架,我使用下面的代碼

public class MyActivityTest{ 

    @Rule 
    public ActivityTestRule activityTestRule = 
     new ActivityTestRule(MyActivity.class); 

    @Test 
    public void testButtonIsVisible() { 
    //Some Test code. 
    } 
} 

運行於Android Studio中的測試後寫一個活動UI測試,MyActivityonCreate()方法被調用和它試圖讓靜態變量。但這些變量的值爲空。原因很簡單。 onCreate()MyApplicationClass.java不會在過程中被調用。

那麼在啓動Espresso中的活動之前,我應該如何調用onCreate()應用類的方法?

P.S.請不要關於設置和獲取靜態變量的建議。代碼的要求。

回答

0

我有同樣的問題,並花了很多時間,直到我意識到我們使用自定義TestRunner和ovveride newApplication方法。正因爲如此,我們在應用程序中使用另一個類,並使用empry onCreate方法。 一旦我切換到默認的TestRunner,應用程序的onCreate按預期執行。

@Override 
@NonNull 
public Application newApplication(@NonNull ClassLoader cl, 
            @NonNull String className, 
            @NonNull Context context) 
     throws InstantiationException, 
     IllegalAccessException, 
     ClassNotFoundException { 

    return super.newApplication(cl,TestPLayerApplication.class.getName(), context); 
} 
相關問題