2

これらは明らかに関連しており、いくつかの類似点がありますが、何がそれらを区別しているのかはわかりません. Robolectric のドキュメントでは、Shadow クラスは Mock または Stub クラスではないことが強調されています。これらはどのように異なり、それぞれどのように使用されますか?

注:この場合、実用的な例(「モッククラスを使用してそのようなものをテストしますが、そのようなもののためにシャドウクラスではテストできませんでした」)は、単なる概要以上のものだと思います特に有用で実例となるでしょう。

4

1 に答える 1

4

MyActivityを使用しないクラスの単純な単体テストを考えてくださいRobolectric.setupActivityMyActivity.onCreate呼び出されたときに何らかの事前初期化が行われることを確認するために呼び出すテストケースを作成します。このテスト ケースはsuper.onCreate、Android システムによって強制される呼び出しで失敗します。

Mockモックできるメンバー変数を使用しないため、役に立ちません。

Stubテストを無意味にするアクティビティのonCreateメソッドをスタブできる継承のため、Aは役に立ちません。

あなたは逃しますSpyが、これも継承のために役に立ちません。Spy を使用すると、スタブのような実際の onCreate 呼び出しを回避できますが、テストも無意味になります。

は、このShadowような状況で役立ちます。これはプロキシのように処理します。継承されたクラスごとに明示的なプロキシが存在する場合があります。静的メソッドについても、各タイプのメソッド呼び出しをインターセプトできます。たとえばandroid.app.Activity、 onCreate メソッドをシャドーイングし、例外をスローする代わりに何もしないプロキシを作成できます...そこでこのイベントを保存できるので、後でこの super.method が予期された引数で呼び出されたことを確認できます。必要 ;)

于 2015-06-22T16:26:23.703 に答える