Получение исключения Nullpointer при UnitTesting Android TabActivity - PullRequest
3 голосов
/ 04 июня 2011

Я сейчас тестирую образец TabLayout с сайта Android . Я получаю исключение 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 голосов
/ 29 ноября 2013

Проблема в ActivityUnitTestCase , поскольку она выполняет тестирование только на панели действий "юнит", а не в модуле. Если вы хотите проверить ее, вы должны расширить ActivityInstrumentationTestCase2 и проверитьскажи математику

0 голосов
/ 26 марта 2012

Проблема в том, что ActivityUnitTestCase предотвращает выполнение startActivity (), чтобы обеспечить изолированную среду для тестирования целевой активности, как описано в здесь . Когда TabWidget вызывает addTab (), он вызывает startActivity (), чтобы начать действие, которое заполнит вкладку, но startActivity () ничего не делает, поэтому addTab () завершается с ошибкой NullPointerException.

Я не могу найти способ избежать этой проблемы. Я просто переключаю его на ActivityInstrumentationTestCase2, затем тест проходит нормально. Но в этом случае я не могу использовать фиктивный контекст для проверки других вещей. Кроме того, он запускает активность в реальной системе (я вижу активность на экране) очень медленно (простой тест занимает 1 секунду на моем устройстве). Поэтому, если вам не нужно макетировать контекст, решением может быть использование ActivityInstumentationTestCase2.

0 голосов
/ 20 июня 2013

Если getActionBar() может вернуть null, проверьте это:

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

Это решило проблему для меня.

0 голосов
/ 04 июня 2011

Я не работал с модульным тестированием, поэтому не могу сказать наверняка, но похоже, что вы не установили класс и контекст для startActivity intent.

...