動作をテストしたい非常に複雑な方法があります(MockitoとJUnitを使用)。このメソッドは、オブジェクト (その type と呼びましょうState
) を入力として取り、その出力を決定するためにいくつかの異なる状態変数を考慮する必要があります。
例として、次の仕様を考えてみます (s
はState
クラスのモックです)。
- が設定されている場合
s.varOne
は、その値を返します。 - が設定されている場合
s.varTwo
は、代わりにそれを返します。 - それ以外の場合、
s.varThree
が設定されている場合は、 を呼び出しs.update(s.varThree)
てから return を返しs.varOne
ます。これには値が含まれます (ステージ 1 ではありませんでしたが)。 - それ以外の場合は、エラーをスローします。
ケース 3 を適切にテストするために、最初はとの両方が設定解除されているようにs
オブジェクトを設定したいと思いますが、sut が を呼び出す場合 (および場合のみ!) 、その後何かを返します。s.varOne
s.varTwo
s.update(s.varThree)
s.varOne
Mockito でこの動作をセットアップする良い方法はありますか?
の戻り値のチェーンをいくつか設定しs.varOne
、呼び出しの順序が出力の順序に対応していることを確認することを検討しました(もちろん、sutの戻り値が正しいことも同様です)が、これは汚いと感じます; 次に、メソッドを変更して戻り値を別の方法で計算すると、呼び出しs.varOne
回数は異なりますが、出力は変更されず、機能が同じであってもテストは失敗します。
私の理想的な解決策は、sut がs.update()
メソッドを呼び出したときに実行されるモック オブジェクトに「遅延」セットアップを追加できる方法ですが、それを達成する方法がわかりません。