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

当ページのリンクには広告が含まれています。
違い,diff,比較,天秤

テストコードでモックを書くときによく使う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は全て使える状態から、指定したメソッドだけ意図した別の振る舞いをさせる。

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次