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 に答える