Allegro!

JavaやIT系小ネタ、趣味の話まで。

【Java】スタブとモックの違い、分かりますか?

皆さまこんにちは。
とうとうお正月三が日も最終日となりましたね。いやぁ…本当に早い。

え?ネタが無いから言っている訳ではありませんよ、ええ、決して。

 

さて、今日から仕事初めの方もいらっしゃるかもしれませんね。

 

私は来週から仕事初めですが、長期連休明けだとどうも頭が働きそうに無いので今日からぼちぼち活動し始めますw

 

新年1発目のブログネタは何にしようか悩みましたが、今回はJUnit周りのstub(スタブ)mock(モック)の違いについて簡単にまとめてみます。

 

今回取り上げているstubとmockについてですが、そもそも「stubって何?え、mock?」とご存知でない方もいらっしゃるかと思いますので「stubとはなんぞや」から始まり、2つの特徴などを皆さんに伝えらたらと思います。

 

 stub(スタブ)とは?

stub(スタブ)とは、テスト用に用意するもので、まだ完成していない機能の代わりとなる部品です。

ちなみに、stub(スタブ)はJUnitで実装することができます。

基本的に未完成の機能の代わりをしてくれる役ではありますが、中身は空っぽです。なので、必要なメソッドなどは全て追加してあげる必要があります。

mock(モック)とは?

mock(モック)は、簡単にいうとクラスの動作をシュミレートするためのオブジェクトです。

テスト対象クラスが呼び出しているクラスをmockに差し替えて動作内容を定義することで、想定しているテスト条件を簡単に作ることができます。

mock(モック)は、JUnitだけではできないので外部ライブラリを使い用意します。

 

stub(スタブ)とmock(モック)の違い

 

さて、それでは次にstub(スタブ)とmock(モック)の違いを比較してみましょう。

 

テスト技法

違い
stub(スタブ) オブジェクトのメソッドが呼ばれたら、設定している戻り値を返すために使用する。
mock(モック) オブジェクトのメソッドがどう呼ばれて何を返すか、インターフェースも含めたテストのために使用する。

 

今回取り上げたstubとmockの違いについてはこんな感じです。

 

現場ではstub作成をしていますし、mockも使用したことがありますがとても便利です。

 

使った印象としては、stubはそのまま戻り値が返ってくるイメージですが、mockについては引数の検証や回数の検証を行うので開発に携わるのであれば絶対に覚えておくべき知識だなと思いました。

 

まとめ

いかがでしたか?

今回はstub(スタブ)とmock(モック)について簡単にまとめてみました。


自分でもstub(スタブ)とmock(モック)の違いが曖昧だったので、これを機にもっと勉強しようと思います!