2015-05-18 3 views
-3

У меня есть собственный класс приложений, MyApplication (extends Application). У меня есть метод 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(); 
    // ... 
} 

Unit Test Класс:

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() { возвращение 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, но это не сработало. –

Смежные вопросы