3

获取Nullpointer异常我目前正在单元测试从android website的示例TabLayout。这样的单元测试时,我得到一个NullPointerException异常:当UnitTesting Android TabActivity

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) 

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

+0

难道欧盟解决这个问题? – kaneda 2011-09-14 00:21:30

+0

您能否正常工作? – WindsurferOak 2011-10-25 21:17:43

+0

我有同样的问题。 – isHwang 2012-03-26 02:12:22

回答

0

我还没有与单元测试合作过,所以我不能肯定地说,但看起来您没有为startActivity intent设置类和上下文。

+0

我不这么认为。它适用于正常的活动。它只是失败与TabActivity。 – 2011-06-04 15:45:07

0

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

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

-1

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

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

这解决了这个问题对我来说。

0

问题是ActivityUnitTestCase,因为它使测试只在“单位”动作条是不是在单位,如果你想测试一下你必须扩展ActivityInstrumentationTestCase2和检查什么说mathume