单元测试Android TabActivity时获取空指针异常

时间:2011-06-04 13:23:46

标签: android unit-testing nullpointerexception tabactivity activityunittestcase

我目前正在对android website的示例TabLayout进行单元测试。在对它进行单元测试时,我得到一个NullPointerException:

public class MainActivityUnitTest extends ActivityUnitTestCase<MainActivity>{

    public MainActivityUnitTest(){
        super(MainActivity.class);      
    }

    @MediumTest
    public void testStartActivity(){
        setActivity(startActivity(new Intent(Intent.ACTION_MAIN), null, null));
    }
}

这是我得到的例外:

java.lang.NullPointerException
at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:277)
at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
at android.widget.TabHost.setCurrentTab(TabHost.java:326)
at android.widget.TabHost.addTab(TabHost.java:216)
at com.foo.android.MainActivity.onCreate(MainActivity.java:55)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:159)
at com.foo.android.test.MainActivityUnitTest.testStartActivity(MainActivityUnitTest.java:17)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

我试图在网上搜索没有运气。我希望有人之前解决过这样的问题。我在这做错了什么?非常感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

我没有使用单元测试,所以我不能肯定地说,但看起来你没有设置startActivity intent的类和上下文。

答案 1 :(得分:0)

问题是ActivityUnitTestCase阻止执行startActivity()以提供隔离环境来测试目标活动,如here中所述。当TabWidget调用addTab()时,它调用startActivity()来启动将填充tabcontent的活动但startActivity()不执行任何操作,因此addTab()因NullPointerException而失败。

我找不到任何方法来避免这个问题。我只是将它切换到ActivityInstrumentationTestCase2然后测试正常。但是,在这种情况下,我不能使用模拟上下文来测试其他东西。此外,它在实际系统下运行活动(我可以在屏幕上看到活动)非常缓慢(只需一个简单的测试需要1秒钟在我的设备上)。因此,如果您不需要模拟上下文,则可以使用ActivityInstumentationTestCase2作为解决方案。

答案 2 :(得分:0)

问题是 ActivityUnitTestCase ,因为它仅对“单位”操作栏进行测试如果你想测试它,你必须扩展 ActivityInstrumentationTestCase2 和检查说数学

答案 3 :(得分:-1)

如果getActionBar()可以返回null,请检查它:

private void setupActionBar() {
    ActionBar ab = getActionBar();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && ab != null) {
        ab.setDisplayHomeAsUpEnabled(true);
    }
}

这解决了我的问题。