3

我正在尝试使用 Robolectric 测试一些代码。

我的代码膨胀了一个布局,然后尝试通过调用findViewById这个布局来检索一个视图。布局膨胀工作正常。但是findViewById,在此布局上始终返回 null。

我可以在调试器中看到膨胀布局的所有(阴影)子视图都在那里并且设置了它们的属性。但是每个孩子的id都设置为0。这是为什么呢?我错过了什么吗?

设备或仿真器(没有 robolectric)上的实际代码工作正常,但是当我尝试使用 robolectric 运行它时,它会按照描述失败。

基本上我的代码如下所示:

LayoutInflater inflater = (LayoutInflater) Robolectric.application.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.timeline_list_item, null);
TextView view = (TextView) layout.findViewById(R.id.listItem_date);
//why is view null here!
view.setText("test");

问候弗兰克

4

2 回答 2

3

谢谢,我找到了问题。

我的资源标识符在我的资源 xml 文件R.id.listItem_date中声明。@+id/listItem.date

Android似乎转换了“。” 在生成的 R 文件中的名称中添加一个“_”。这在编译和运行代码时工作正常,但显然 robolectric 存在问题。

当我将资源名称中的点更改为下划线时,我的 robolectric 代码可以正常工作。

现在我知道要寻找什么,我发现有一个开放的错误票: https ://github.com/pivotal/robolectric/issues/265

于 2013-01-27T17:15:42.563 回答
0

请查看以下更改

LayoutInflater inflater = (LayoutInflater)**"ContextOnject"**.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.timeline_list_item, null);
于 2013-01-25T18:43:30.493 回答