Robolectric Resources$NotFoundException с getBoolean() и getInteger()

Я настроил модульные тесты robolectric для своего приложения и столкнулся с проблемой с целочисленными и логическими ресурсами, определенными в XML. У меня есть тесты в отдельном проекте, но я установил рабочий каталог для тестируемого проекта, как описано в этот ответ. Кажется, что Robolectric правильно находит некоторые ресурсы, потому что getString(...) и getDrawable(...) работают нормально. Однако getBoolean(...) и getInteger(...) терпят неудачу с Resources$NotFoundException.

Я упростил один из тестов, чтобы воспроизвести поведение:

@Test
public void testResources() {

    TestActivity activity = controller.get();
    String theString = activity.getString(R.string.ab_request); // works
    Drawable theDrawable = activity.getResources().getDrawable(R.drawable.ab_back); // works
    boolean theBool = activity.getResources().getBoolean(R.bool.isRelease); // fails
    int theInt = activity.getResources().getInteger(R.integer.act_noNetwork); // fails
}

Это известная ошибка Robolectric? Я искал некоторое время и не нашел никого с такой же проблемой.

Обновление Кажется, это как-то связано с моей папкой res. Я начал с нового проекта Android и одного теста выше. Затем я добавил зависимости своего проекта: тест все еще выполнялся. Я скопировал свою папку res в новый проект: тест не прошел.


person Thrakbad    schedule 24.02.2014    source источник


Ответы (1)


Я нашел ошибку. Оказывается, Robolectric не поддерживает тег элемента для ресурсов, объявленных в XML. Мои ресурсы были объявлены как

<item type="bool" name="isRelease">false</item>
<item type="integer" name="act_noNetwork">12345</item>

Однако синтаксический анализатор Robolectric XML просто проверяет bool узлов, а не item узлов при разборе логических значений. То же самое касается целых чисел, я не проверял другие типы. Я изменил свои декларации на:

<bool name="isRelease">false</bool>
<integer name="act_noNetwork">12345</integer>

Теперь Robolectric корректно парсит ресурсы. Обратите внимание, что оба способа одинаково применимы в обычной среде выполнения Android. Я не проверял официальные документы, если есть какие-либо рекомендации.

person Thrakbad    schedule 24.02.2014