我试图通过使用ActivityUnitTestCase扩展测试类,在我的应用程序中为活动编写单元测试用例.我可以早期成功运行测试用例,但现在我总是在运行它们时得到异常.即使我很熟悉处理NullPointerExceptions,但我无法弄清楚导致此问题.我找不到任何类似的问题,所以我发布这个.
堆栈跟踪显示我的代码中的这一行有一个空对象引用
activity = startActivity(mIntent,null,null);
但是StartActivity方法应该是获取我正在测试的活动的实例.我不知道为什么它返回null.
这是堆栈跟踪.
java.lang.NullPointerException: Attempt to write to field 'android.os.IBinder android.app.ActivityThread.mLastIntendedActivityToken' on a null object reference at android.app.Activity.performCreate(Activity.java:6372) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:346) at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:158) at com.abc.test.MainActivityTest.access$100(MainActivityTest.java:16) at com.abc.test.MainActivityTest$1.run(MainActivityTest.java:34) at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:1891) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6117) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) Test running failed: Instrumentation run failed due to 'java.lang.NullPointerException'
这是Test类
public class MainActivityTest extends ActivityUnitTestCase<MainActivity>{ private Intent mIntent; private MainActivity activity; public MainActivityTest() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); //Create an intent to launch target Activity as it is not automatically started by Android Instrumentation mIntent = new Intent(getInstrumentation().getContext(),MainActivity.class); //Start the activity under test in isolation,in the main thread to avoid assertion error. getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { activity = startActivity(mIntent,null); } }); } @Override protected void tearDown() throws Exception { super.tearDown(); } /** * Tests the preconditions of this test fixture. */ @SmallTest public void testPreconditions() { assertNotNull("MainActivity is null",getActivity()); } @MediumTest public void testSecondActivityWasLaunchedWithIntent() { // Get the intent for the next started activity final Intent launchIntent = getStartedActivityIntent(); //Verify the intent was not null. assertNotNull("Intent was null",launchIntent); //Verify that LaunchActivity was finished assertTrue(isFinishCalled()); } }
解决方法
@prudhvi我不认为我有一个银弹,不幸的是,但我建议尝试跟随
these steps升级到SDK的较新版本的新的测试支持库.对不起,我不能更多的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。