プログラミング Java

【図解】Mockito – mock と spy の違いは?

投稿日:2022年3月8日 更新日:

テストコードでモックを書くときによく使うMockitoですが、mock()とspy()の違いについてよくわからないという方向けに図解で解説します。

図解

mock()

・全てのメソッドが一旦使用不可になる。
・doReturnなどで戻り値を定義したメソッドだけ利用可能
 (上図ではgetB()のみが使用可能な状態です)

spy()

・全てのメソッドはそのままで実行可能です。
・doReturnなどで戻り値を定義したメソッドだけ戻り値が上書きされます。
 (上図ではgetB()のみが変更した値を返すようになります)
 

コード

 
Hoge.java(テスト対象)

HogeTest.java(テストコード)

testMockCase

・getA()とgetC()はnullを返すのでコメントアウトしています。
・getB()はdoReturnで指定した戻り値でテストが通ります。

testSpyCase

・getA()とgetC()はHoge.javaで定義されている元々の値を返します。
・getB()はdoReturnで指定した戻り値でテストが通ります。

 

使い分け

mockは特定の値を返してほしいときに使います。

spyは一部の振る舞いを変えたうえで他のクラスに食わせて、意図した振る舞いをさせるときに使います。
例えば、Hoge.javaを持つことになる別のクラスに渡すとき、getB()の戻り値がNULLであることを期待するといった場合です。

まとめ

・mockは全て使えない状態にして、指定したメソッドだけ定義通りの振る舞いにする。
・spyは全て使える状態から、指定したメソッドだけ意図した別の振る舞いをさせる。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

【Bootstrap】一覧表示をデザインしよう!

概要 一覧表示をデザインします。 Bootstrapにはすぐに使える便利なクラスが用意されているので、それらを使用して実現します。 【SpringBootチュートリアル】#7~ 検索画面の作成に変更を …

【SpringSecurity】#2~ ユーザ毎の権限設定(認可)

概要 権限によって、アクセス可能なページを制限する機能の実装します。 管理者画面を作成し、権限によって画面の出し分けを行います。 前提 #1~ ログイン画面の実装が完了していること。 管理者画面の追加 …

Springメモ(あれ、どうすんだっけ?)

@Autowiredアノテーションをつけることができる箇所(3つ) ・フィールド変数 ・コンストラクタの引数 ・setterの引数 ※引用 【後悔しないための入門書】Spring解体新書: Sprin …

【Java入門】例外処理の基本的な操作まとめ

概要 例外処理の基本的な知識と操作について記載しています。 例外処理の構文 try~catch~finally ◆基本構文

・fina …

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。