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