2019年5月16日mockitoについての全投稿は/tag/mockitoにあるので参照されたいMockitoのスタブ化には二通りの書き方がある。when()に解説してくれている人がいる。二つの構文はおおよそ同じだ。doReturn/whenはいつでも使えるのに対し、when/thenReturnは使えないケースがある。voidメソッドをスタブ化するのがその一つだ。他の例としては、Mockitoのspyを使う場合や、一つのメソッドを複数回スタブ化する場合だ。doReturn/whenには無い、when/thenReturnがもたらしてくれるものとしては、コンパイル時の返り値タイプチェックだ。これにはほぼ価値が無いと思う。型が間違っていれば、テストを走らせるやいなやわかることだからね。強くおすすめするのは、doReturn/whenのみを使うことだ。片方でできるのに、二つの構文を学ぶ理由は無いよね。“grammers”を読んでみて欲しい。今回の質問に非常に近い、詳細な答えを書いている。“grammers”における回答者の答え。when/thenReturn、when/thenThrow、when/then構文には様々不利な点がある。when/thenReturnでは、返り値がワイルドカード付ジェネリックの場合で、同じ型を返したい場合には、コンパイラの警告が不可避だ。voidメソッドにはwhen/thenThrowが使用できない。Mockitoのspyにはこれらの構文は使用できない。モックオブジェクト、メソッド、引数のそれぞれの組み合わせに対して一度しかwhenを呼び出せない。モックに対してreset()を行わない限りは。引数マッチャーを使用中に、一つのモックオブジェクト、メソッド、引数の組み合わせに対して、複数回whenを呼び出すと、問題を起こしかねない。これらのケースを覚えておくのは難しいと感じた。when/thenがいかなる場合に機能して機能しないかを追うよりも、おすすめは、これらは完全に排除することだ。doAnswer/whenを使うってこと。doThrow/when,doAnswer/whenを使う場合もあるということではなく、いつもこれらのメソッドを使うということだ。when/thenを学習する必要は無い。doAnswerの呼び出しで複数の値を返すことだ(あるいは、複数の例外を返したり、複数のAnswerを行うこと)。これが必要なのは稀だと思うから、重大なことではない。※訳注:2.1.0から、doReturn,doThrowは複数の値を返せるようになっている。一つ、doReturnの取るに足らない弱点がある。コンパイル時の引数タイプチェックができないことだ、when/thenReturnのようには。引数タイプが間違っている場合は、テストの実行まではわからない。率直に言って、僕は気にしないね。使うのがMockitoのベスト・プラクティスだと思ってる。他のユーザは不賛成だけどね。...mockitoマニュアルMockitoの入門編等は/tag/mockitoを参照して欲しい。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。