こんにちは、JUnitテストケースを作成しようとしたときに問題に遭遇しました。Mockitoは比較的新しいです。
私がモックしているクラスの関数がありますが、この関数はたまたまvoid戻り型です。私のモッククラスからこの関数を呼び出すとき、元の関数を呼び出さないことが私の理解(およびデバッグ経験)です。これを克服するために、「thenCallRealMethod()」で「when」を使用しようとしました。
when(instance.voidFunction()).thenCallRealMethod();
「voidFunction」は、起動したくないロジックでいっぱいです。これを回避するために、これらをwhenステートメントに抽出しました。私はの形式を使用する必要があることを読みましたがdoReturn().when().voidFunction()
、これを実行しても実際のメソッドは呼び出されません。
「when」ステートメントの前にvoidFunction()が呼び出されないようにするため、ここではSpyを使用できないことも理解しました。少し読んでもmockitoに関する私の理解があまり良くないので、これが非常に簡単な解決策であるならば、どんな助けでも感謝します。ありがとう!
このwhen
構文はvoidメソッドでは機能せず(内に収まりませんwhen
)、doReturn
戻り値がない場合は適用されません。doCallRealMethod
おそらくあなたが望む答えです。
doCallRealMethod().when(instance).voidFunction();
モックで実際のメソッドを呼び出す場合、スパイとは異なり、モックされたオブジェクトはフィールドを設定するものを含むすべてのコンストラクターおよびイニシャライザの呼び出しをスキップするため、実際の動作が得られない場合があることに注意してください。つまり、メソッドがインスタンス状態をまったく使用する場合、doCallRealMethod
またはでモックとして機能することはほとんどありませんthenCallRealMethod
。スパイを使用すると、クラスの実際のインスタンスを作成でき、Mockito.spy
メソッドはそのインスタンスの状態をコピーして、より現実的な相互作用を実現します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加