プログラミング 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


関連記事

ExcelをA1セルに揃えて拡大率100%にするツール

(追記:2021年8月18日) サブフォルダを処理対象にするかどうかを選択できるように改修しました。   たくましゅくじょさんのところで公開されていた、 「エクセルで全シートの拡大率を100%にしA1 …

Camtasia(カムタジア)でKrisp(クリスプ)を使う方法

Camtasiaで動画撮影する時のノイズ除去にKrispを導入する方法です。 前提 Krisp(無料版でOK)をインストール済みであること。 Pro版を試したい方は以下の招待URLからダウンロードして …

elseを使わないことでパフォーマンスが下がる場合の対処法

  状況 前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は パフォーマンスが下がる。 …

no image

PHPの開発環境の作り方

前提 OS:Windows10 準備 XAMPPのダウンロード https://www.apachefriends.org/jp/download.html 構築 XAMPPのインストール インストー …

エンジニア未経験者の転職が難しくなったので解決策を提案してみる

現状 コロナ以降、未経験者のエンジニア採用が少しずつなくなっていきました。 それまではポートフォリオを作ったり、ある程度のポテンシャルがあると判断されれば 採用されるということがあったのですが、それが …

SpringFramworkの良書

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

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