2015-10-28 2 views
4

Когда я запускаю мой тест, я получаю эту ошибку:Инструменты тестирования: getActivity() вызывает NullPointerException

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Instrumentation.setInTouchMode(boolean)' on a null object reference

at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:100)

at com.example.my_project.MyActivityTest.setup(MyActivityTest.java:46)

Это мой код:

@RunWith(AndroidJUnit4.class) 
public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> { 

    private MyActivity myActivity; 
    // ... 

    public MyActivityTest() { 
     super(MyActivity.class); 
    } 

    @Before 
    public void setup() throws Exception { 
     super.setUp(); 

     setActivityInitialTouchMode(true); 
     myActivity = getActivity(); 
    } 

Я также попытался заменить большую часть выше кода с помощью метода тестирования:

@Test 
public void testActivityNotNull() { 
    MyActivity myActivity = getActivity(); 
    assertNotNull(myActivity); 
} 

, но я получаю такую ​​же ошибку. Почему это происходит?

+0

Возможный дубликат [getActivity() возвращает нуль в моем классе ActivityInstrumentationTestCase2] (https://stackoverflow.com/questions/33727849/getactivity-returns-a-null-in-my-activityinstrumentationtestcase2-class) – RoastDuck

ответ

6

Наконец-то выяснилось. Вам необходимо добавить следующую строку кода:

injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 

прежде чем вызывать getActivity(). Так что в вашем случае, если бы метод установки, как это:

@Before 
    public void setUp() throws Exception { 
    super.setUp(); 

    // Injecting the Instrumentation instance is required 
    // for your test to run with AndroidJUnitRunner. 
    injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
    mMainActivity = getActivity(); 
} 

Ответ был найден в официальной документации: http://developer.android.com/tools/testing-support-library/index.html#AndroidJUnitRunner