Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Instrumentation testing: getActivity() is causing a NullPointerException

When I run my test I get this error:

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)

This is my code:

@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();
    }

I have also tried replacing most of the above code with a test method like this:

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

but I get the same error. Why is this happening?

like image 761
moarCoffee Avatar asked Oct 28 '15 16:10

moarCoffee


1 Answers

Finally figured it out. You need to add following line of code:

injectInstrumentation(InstrumentationRegistry.getInstrumentation());

before you call getActivity(). So in your case you would have setup method like this:

  @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();
}

Answer have been found in official docs: http://developer.android.com/tools/testing-support-library/index.html#AndroidJUnitRunner

like image 86
Defuera Avatar answered Nov 15 '22 08:11

Defuera