getActionBar() отлично работает на устройствах/симуляторах, но возвращает null в тестовых примерах.

Приложение поддерживает minSdk=14 и имеет ActionBar на каждом Activity.

Приложение давно работает нормально и показывает ActionBar на каждые Activity. Теперь я пишу Android JUnit Testcases, но он выдает NullPointException в строке

  getActionBar().setDisplayHomeAsUpEnabled(true);

Суть в том, что getActionBar() работает на устройствах, но возвращает null во время тестов. Если я удалю строку, то с тестовыми примерами все в порядке.

Вот как выглядит активность.

protected void onCreate(Bundle savedInstanceState) {      
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_order);
      getActionBar().setDisplayHomeAsUpEnabled(true);

// другие вещи под ним

 }

JUnits — это простые тестовые примеры JUnit для Android без каких-либо фреймворков.

public class OrderActivityTest extends ActivityUnitTestCase<OrderActivity> {   

  private OrderActivity activity;

  public OrderActivityTest() {        
          super(OrderActivity.class);   
    }   

    protected void setUp() throws Exception {
         super.setUp();
         Intent intent = new Intent(getInstrumentation().getTargetContext(),OrderActivity.class);
         startActivity(intent, null, null);
         activity = getActivity();
    }

  public void testPreConditions() {
         assertTrue(activity != null);    
     }  
 }

И, наконец, вот исключение при выполнении тестового примера.

java.lang.NullPointerException
at com.example.name.OrderActivity.onCreate(OrderActivity.java:176)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:158)
at com.example.name.test.OrderActivityTest.setUp(OrderActivityTest.java:23)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

Строка 176: getActionBar().setDisplayHomeAsUpEnabled(true);


person Sharj    schedule 21.04.2014    source источник
comment
Вы решили эту проблему?   -  person Kolchuga    schedule 24.04.2014
comment
@Kolchuga Нет, не видел.   -  person Sharj    schedule 24.04.2014
comment
@Sharj Ваша активность расширяет Activity или что-то еще, например FragmentActivity или ActionBarSherlock?   -  person IgorGanapolsky    schedule 05.05.2014
comment
@IgorGanapolsky Это расширяет активность.   -  person Sharj    schedule 05.05.2014


Ответы (1)


getActionBar(), вероятно, возвращает здесь null. Заголовок должен быть виден, убедитесь, что у вас нет таких вещей:

android:theme="@android:style/Theme.Black.NoTitleBar

Это приведет к ошибке в getActionBar(), равной нулю.

person reidisaki    schedule 21.04.2014
comment
Я не. У меня есть тема @android:style/Theme.Holo.Light.DarkActionBar. Я вижу ActionBar, но не в тестовом примере JUnit, он нулевой. - person Sharj; 21.04.2014
comment
Вы видели это? blog.perpetumdesign.com/ 2011/08/ - person reidisaki; 21.04.2014
comment
Да, я читал это пару раз. Никогда не было проблем с этим, прежде чем просто возникли проблемы с тестированием Activity с помощью родной панели ActionBar. - person Sharj; 21.04.2014