2015-05-18 28 views
-3

我有一個自定義應用程序類MyApplication(擴展應用程序)。我有一個getInstance()方法,它只是返回自己,這樣我就可以從任何地方訪問應用程序上下文。NullPointerException運行單元測試時獲取應用程序上下文

我想單元測試調用MyApplication.getInstance()的方法,但它返回null,所以我的單元測試失敗。

有誰知道如何做到這一點?或者,我需要將我的應用程序上下文傳遞給要測試的方法,以便對該方法運行測試。

下面是一些代碼:

所有MyApplication:

public class MyApplication extends Application 
{ 
    private static MyApplication sInstance; 

    public static MyApplication getInstance() 
    { 
     return sInstance; 
    } 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     sInstance = this; 
    } 
} 

方法測試:

public static String getErrorMessage(int httpStatus) 
{ 
    // GETTING NULL POINTER EXCEPTION ON THIS LINE 
    Resources resources = Bakery.getInstance().getApplicationContext().getResources(); 
    // ... 
} 

的單元測試類:

public class ManagerApiTest extends AndroidTestCase 
{ 

    public void testGetErrorMessage() throws Exception 
    { 
     Resources resources = getContext().getResources(); 

     String messageInternal = ManagerAPI.getErrorMessage(500); 
     assertEquals(resources.getString(R.string.server_error_internal), messageInternal); 
    } 
} 
+0

您還沒有實例化的私有靜態麪包店sInstance; public static Bakery getInstance() { return sInstance; },所以調用get方法將返回null。你需要嘲笑它。 – Stultuske

+0

謝謝@Stultuske,sInstance在onCreate()中實例化。 –

+0

是的,但我沒有看到onCreate() – Stultuske

回答

-1

嘗試改變

public static Bakery getInstance() 
{ 
    return sInstance; 
} 

public static Bakery getInstance() 
{ 
    if(sInstance != null) { 
     return sInstance; 
    } else { 
     return new Bakery(); 
    } 
} 
+0

謝謝@Arthur,但那不起作用。 –

相關問題