2

Я пытаюсь запустить некоторые интеграционные тесты с помощью Espresso на простой активности, которая после запуска запускает загрузчик для извлечения некоторых данных.Эспрессо для Android с фрагментами. getActivity возвращает NULL

Проблема заключается в том, что когда я запускаю мои тесты (даже очень просто, такие как проверка, если кнопка находится на главной странице) результат непрерывно меняется, и я получаю разные времена NPE

Попытка вызова виртуальный метод «android.content.Context.getApplicationContext()» на нулевой объект ссылка

Моя деятельность пуст и имеет фрагмент, и ошибка может получить отслеживаются назад, когда, чтобы запустить загрузчик, Прошу контекста

MyLoader loader = new MyLoader(getActivity(), certainUrl); 

Из этого я понимаю, что getActivity() возвращается null иногда, а затем вниз по линии это бросает исключение (так как в классе Android Loader метод context.getApplicationContext называется)

Это мой тестовый класс

public class HomeFragmentTest extends ActivityInstrumentationTestCase2<HomeActivity> { 

    private HomeActivity _activity; 

    public HomeFragmentTest() { 
     super(HomeActivity.class); 
    } 

    protected void setUp() throws Exception { 
     super.setUp(); 
     _activity = getActivity(); 
     injectInstrumentation(getInstrumentation()); 
    } 

    public void testButton() { 
     onView(withId(R.id.button)) 
       .check(matches(allOf(
         isDisplayed(), 
         ViewMatchers.isCompletelyDisplayed() 
       ))); 
    } 
} 

Спасибо всем за помощь

ответ

1

Измените метод setUp как в этом примере:

public class FirstActivityUnitTest extends 

    android.test.ActivityUnitTestCase<FirstActivity> { 

    private FirstActivity activity; 

    public FirstActivityUnitTest() { 
    super(FirstActivity.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
    super.setUp(); 
    Intent intent = new Intent(getInstrumentation().getTargetContext(), 
     FirstActivity.class); 
    startActivity(intent, null, null); 
    activity = getActivity(); 
    } 

    @SmallTest 
    public void testSomething() { 
    // assertions here 
    } 

    @Override 
    protected void tearDown() throws Exception { 
    super.tearDown(); 
    } 
} 

Также проверьте, если в файле build.gradle у вас есть эти зависимости:

android { 
    defaultConfig { 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
      } 
     } 

dependencies { 
    androidTestCompile 'com.android.support:support-annotations:23.+' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
    androidTestCompile 'com.android.support.test:runner:0.4.1' 
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1' 
} 

Самым важным здесь является объявить testInstrumentationRunner

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