2

私はstackoverflowとgoogleを介していくつかのコードでShadowApplicationへの参照をたくさん見ていますが、それが何をするのかわかりません。

いくつかのドキュメントリソースが不足しているかどうかはわかりませんが、適切なリソースを提供できません。javadocapiもあまり説明していません。

誰かがShadowApplicationに関する詳細情報を提供できますか?トレーニング、チュートリアルなどのリソースは他にありますか?

ShadowApplication以外の多くのものが欠けていると確信しています

4

2 に答える 2

8

Dalvik VMではなくJVM内でのAndroidコードの実行を禁止するために、Googleはandroid.jarファイルのクラスを削除し、すべてのメソッド本体を次のように置き換えました。

new RuntimeException( "Stub!");をスローします。

一般的に、Robolectricは、この問題を解決するために、ビューとリソースの読み込みを伴うシャドウオブジェクトを使用します。

シャドウオブジェクトはどのように機能しますか?

  • Robolectricは、テスト中のAndroidクラスの読み込みをインターセプトします。
  • Androidクラスのメソッド本体を書き直します(javassistを使用)。
  • シャドウオブジェクトを新しいAndroidオブジェクトにバインドします。
  • 変更されたAndroidオブジェクトプロキシメソッドは、シャドウオブジェクトを呼び出します。
  • Androidクラスをシャドウバックします。つまり、ShadowImageViewはImageViewクラスをサポートします。
  • Androidオブジェクトへのメソッド呼び出しは、同じシグネチャのシャドウオブジェクトのメソッド(存在する場合)にプロキシされます。
  • 初歩的な振る舞いを与える単純な実装。
  • 状態は記録されるため、テストで検証できます。

詳細については、こちらの基調講演とこのYouTubeセッションをご覧ください。

于 2012-07-24T10:33:13.407 に答える
0

Roboelectricのドキュメントを見て、理解できない概念が説明されているかどうかを確認する必要があると思います。

マニュアルから:

Androidクラスは、テスト対象のAndroidオブジェクトの状態にアクセスするためのメソッドを提供しない場合があります。Robolectric.shadowOf()メソッドは、Androidオブジェクトを表すシャドウインスタンスへの参照を提供し、他の方法では利用できない状態でテストをアサートできるようにします。

これは、Roboelectricのソースを見て、Applicationのような多くの(すべてではないにしても)Androidクラスのシャドウ実装を見るときに意味があります(ShadowApplicationを参照)。

于 2012-07-24T10:01:20.253 に答える