Robolectric 1.1 не может загрузить файл макета, если файл находится не в каталоге res/layout/

когда я запускаю тесты в robolectric 1.1, возникает следующая ошибка при раздувании файла макета:

   java.lang.RuntimeException: Could not find layout layout/home_layout
       at com.xtremelabs.robolectric.res.ViewLoader.inflateView(ViewLoader.java:92)
       at com.xtremelabs.robolectric.res.ViewLoader.inflateView(ViewLoader.java:82)
       at com.xtremelabs.robolectric.res.ViewLoader.inflateView(ViewLoader.java:86)

Кто-нибудь знает, почему возникает эта ошибка? из того, что я видел, в версии 1.1 robolectric не было изменений в способе загрузки файлов макетов, он ищет папку layout/:

   private ViewNode getViewNodeByLayoutName(String layoutName) {
        if (layoutName.startsWith("layout/") && !qualifierSearchPath.isEmpty()) {
            String rawLayoutName = layoutName.substring("layout/".length());
            for (String location : qualifierSearchPath) {
                ViewNode foundNode = viewNodesByLayoutName.get("layout-" + location + "/" + rawLayoutName);
                if (foundNode != null) {
                    return foundNode;
                }
            }
        }
        return viewNodesByLayoutName.get(layoutName);
    }

но если файл макета находится в другом каталоге (например, layout-normal-hdpi), произойдет эта ошибка..

Кто-нибудь знает какое-нибудь решение для этого?


person Robson R Ferreira    schedule 08.11.2012    source источник


Ответы (1)


Квалифицированные ресурсы

В сценарии, описанном выше, в RoboElectric 2.4 (возможно, в более ранних версиях, я не проверял) можно указать квалификатор для ресурса. См. страницу RoboElectric на Подходящие ресурсы.

Например, если есть ресурсы:

 layout/settings_config.xml
 layout-normal/settings_config.xml
 layout-normal-hdpi/settings_config.xml

... тогда атрибут @Config(qualifiers="normal-hdpi") обеспечит использование ресурса layout-normal-hdpi/settings_config.xml.

Изменение путей к ресурсам с помощью другого RobolectricTestRunner

Другой подход (вероятно, не для использования в этом сценарии, но хороший, если пути к ресурсам были изменены в build.gradle) заключается в загрузке разных ресурсов как части реализации RobolectricTestRunner. Вот хороший пример того, как это сделать:

https://stackoverflow.com/a/29223625/3063884

person CJBS    schedule 04.05.2015