クラスをテストしていて、そのクラスでメソッド呼び出しをモックしたいと思います。
class B{
method A();
String method C();
}
ここで、メソッドがURLから入力を読み取るときに、メソッドをテストし、メソッドA
の呼び出しをモックします。Mockitoを使用してこれを行うにはどうすればよいですか?C
C
ここにはいくつかのオプションがあります。
おそらく最も単純です-mockitoスパイ(http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#13)を使用できます。これは、いくつかのメソッドをスタブできるオブジェクトです。 、およびその他は既存の動作を保持します。
または、モックを使用してから、静的doCallRealMethodメソッドを使用してmethodAをスタブし、thenCallRealMethodと組み合わせて使用することもできます。
しかし、私の意見では何よりも、URLから読み取る部分が別のクラスに含まれるように、クラスをリファクタリングすることです。次に、別のクラスのモックを使用して、クラスBの単体テストを記述します。次に、URLから読み取るクラスの統合テストを記述します。
このアプローチが明確でない場合は、ここにコメントを投稿してください。詳しく説明してみます。
実際、オブジェクトをモックするとき(少なくともmockitoを使用する場合)、オブジェクト全体をモックし、ドキュメントにこれが含まれている推奨されない呼び出しを使用せずに:
いつものように、部分的なモック警告を読みます。オブジェクト指向プログラミングは、複雑さを個別の特定のSRPyオブジェクトに分割することにより、複雑さへの取り組みが少なくなります。部分的なモックはこのパラダイムにどのように適合しますか?まあ、そうではありません...部分的なモックは通常、複雑さが同じオブジェクトの別のメソッドに移動されたことを意味します。ほとんどの場合、これはアプリケーションを設計する方法ではありません。
したがって、2つの解決策が可能です。
1-methodCが実際のclassBの集約クラスに含まれるようにクラスを再設計します。その後、テストされたclassBで完全にモックできる新しいクラスを注入できます。ボーナスとして、外部ソースが変更されたときにテストと保守を支援するために、すべての外部世界の相互作用を個別にカプセル化する必要があるため、タスクの分離が向上します(ただし、メソッドAとCが何をするのか具体的にはわかりません)
2-テストクラスでは、ClassBを拡張してmethodCをオーバーライドできます。これにより、一種の手動モックが作成され、モックフレームワークは必要ありませんが、mockitoの部分的な警告はここでも保持できます。
この助けを願っています