3

当我在 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)

有谁知道为什么会发生这个错误?据我所见,在 robolectric 1.1 版中,加载布局文件的方式没有改变,它搜索文件夹 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),就会出现这个错误..

有谁知道任何解决方案?

4

1 回答 1

0

合格资源

在上述场景中,在 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

于 2015-05-04T19:51:18.527 回答