I have an ActivityInstrumentationTestCase2 and I have had no luck getting context for the test.
package com.vsnetworks.vsnmedia.test;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase2;
import com.vsnetworks.vsnmedia.MainActivity;
import com.vsnetworks.vsnmedia.VSWebViewClient;
public class TestMimeTypes extends ActivityInstrumentationTestCase2<MainActivity> {
Activity activity;
Context context;
public TestMimeTypes() {
super(MainActivity.class);
}
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
context = activity.getApplicationContext();
}
public void test() {
String external = context.getExternalFilesDir(null).toString();
}
Here's the error I get:
[exec] com.vsnetworks.vsnmedia.test.TestMimeTypes:INSTRUMENTATION_RESULT: shortMsg=java.lang.NullPointerException
[exec] INSTRUMENTATION_RESULT: longMsg=java.lang.NullPointerException: Unable to start activity ComponentInfo{com.vsnetworks.vsnmedia/com.vsnetworks.vsnmedia.MainActivity}: java.lang.NullPointerException
[exec] INSTRUMENTATION_CODE: 0
I think it's context related because if I do the below:
Context context = this.getInstrumentation().getTargetContext();
I get (line 37 is context.getExternal line)
[exec] com.vsnetworks.vsnmedia.test.TestMimeTypes:
[exec] Error in test:
[exec] java.lang.NullPointerException
[exec] at com.vsnetworks.vsnmedia.test.TestMimeTypes.test(TestMimeTypes.java:37)
[exec] at java.lang.reflect.Method.invokeNative(Native Method)
[exec] at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
[exec] at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
[exec] at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
[exec] at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
[exec] at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
[exec]
[exec] Test results for InstrumentationTestRunner=..E
[exec] Time: 0.292
[exec]
[exec] FAILURES!!!
[exec] Tests run: 2, Failures: 0, Errors: 1
I have also tried all the below with the same errors, even with getInstrumentation.waitForIdleSync() (which I saw in another thread) in a few places as well. I've tried creating new MainActivity() objects and getting context from there as well as getActivity(), same problem.
context = getInstrumentation().getContext();
context = getInstrumentation().getTargetContext();
context = activity.getApplicationContext();
context = activity.getBaseContext();
So what in the world am I doing wrong?
Edit 1 - It would appear this problem only occurs on an emulator. If I use a real device to run the tests they both pass.
I think this is what you're looking for:
There was actually two problems I had to solve. The first was that I had an external library included in my main project. When running the tests, the external library was not being properly added. When creating main, it was failing silently upon trying to use the library. To solve that I followed the various solutions here:
Can't build and run an android test project created using "ant create test-project" when tested project has jars in libs directory
Which led me to this one:
Android unit test using ant with library project
Android unit test using ant with library project R18
My fix differed slightly, however. Instead of using the overridden -compile tag in those projects, I simply copied the build.xml compile in my /tools/ant into my test's build.xml and added
In the same spot as the second answer's.
The second problem was that the sd card the emulator was trying to use wasn't working. I'm not sure exactly on the reason, but creating a new one seemed to solve the problem.