NullPointerException для getSupportActionBar() с использованием Robolectric 2.3-SNAPSHOT

я застрял, чтобы запустить robolectric в моем проекте Android. Я уже проделал долгий путь, чтобы добраться до этой точки. Robolectric уже запускает пару моих тестов, но когда я создаю какое-то действие, которое настраивает ActionBar, тесты завершаются с ошибкой NullPointerException:

java.lang.NullPointerException
    at android.support.v7.app.ActionBarImplICS.setNavigationMode(ActionBarImplICS.java:214)
    at android.support.v7.app.ActionBarImplJB.setNavigationMode(ActionBarImplJB.java:20)
    at org.project.android.SearchLocationFilterActivity.setupActionBar(SearchLocationFilterActivity.java:57)
    at org.project.android.BaseFragmentActivity.onCreate(BaseFragmentActivity.java:67)
    at org.project.android.SearchLocationFilterActivity.onCreate(SearchLocationFilterActivity.java:22)
    at android.app.Activity.performCreate(Activity.java:5133)
    at org.fest.reflect.method.Invoker.invoke(Invoker.java:112)
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:150)
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:265)
    at org.robolectric.util.ActivityController.create(ActivityController.java:147)
    at org.robolectric.util.ActivityController.create(ActivityController.java:157)

В этом действии я настраиваю ActionBar, этот код вызывается.

@Override
protected void setupActionBar(final ActionBar actionBar)
{
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayHomeAsUpEnabled(true);
    setSupportProgressBarIndeterminateVisibility(false);
    setSupportProgressBarVisibility(false);

}

Я видел сообщение об этой проблеме, но не могу понять, как это решить.

Поскольку я использую некоторую базовую активность, onCreate вызывается из метода расширения Activity onCreate().

@Override
protected void onCreate(final Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setupActionBar(getSupportActionBar());

}

Мой build.gradle использует последний SNAPSHOT, чтобы довести меня до этого момента:

 compile 'com.android.support:appcompat-v7:19.0.0+'
 compile 'com.android.support:support-v4:18.0.0'

 testCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'

Nullpointer поднимается в первой строке, поэтому ActionBar имеет значение null, когда я передаю его методу.

У кого-нибудь это работает?

ОБНОВИТЬ:

Нашел этот Pull запрос, который, кажется, решает эту проблему, но мне кажется действительно хакерским. Проблема еще более подробно обсуждается в этой теме.


person Kitesurfer    schedule 20.01.2014    source источник
comment
на какой именно линии он терпит неудачу.   -  person user2511882    schedule 20.01.2014
comment
я обновил свой вопрос   -  person Kitesurfer    schedule 20.01.2014
comment
показать весь код активности   -  person Daniel Bo    schedule 20.01.2014


Ответы (2)


Я использую снимок Robolectric 2.3, и я также попал в NPE, пока не начал устанавливать свойство «reportSDK». Сначала я использовал аннотацию @Config следующим образом:

@Test
@Config(reportSDK = 13)
public void myTest() { 
    // test here
}

Если это решит проблему, я бы рекомендовал использовать файл свойств для применения этой конфигурации. Поскольку аннотация @Config не наследуется, установка этого значения в файле — лучший способ применить его ко всем тестам, включая новые, добавленные в будущем.

Файл свойств должен называться org.robolectric.Config.properties и содержать следующее:

reportSdk=13

Этот файл свойств должен быть доступен в вашем пути к классам.

Первоначально я пробовал это решение благодаря этому вопросу SO:

person Jordan    schedule 21.01.2014
comment
Я уже использую файл org.robolectric.Config.properties, он мне нужен, чтобы обойти ошибку API уровня 19 не поддерживается. Но это не решает проблему NPE для меня. - person Kitesurfer; 21.01.2014

Возможно, вы можете попробовать создать пользовательскую тему, как показано здесь. это исправило для меня NPE (хотя у меня есть другие проблемы с ActionBar - см. /21310177?noredirect=1#comment32154183_21310177">мой вопрос подробнее - )

person LucaD    schedule 24.01.2014