ソフトウェアのテストをするとき、確認したい部分が、まだ完成していない別の部品や、外部のサービスとつながっていることがあります。そのままではテストしづらいため、本物の代わりとなる仮の部品を用意することがあります。この代役がモックです。この記事では、モックの意味や役割を初心者の方にもわかりやすく解説していきます。
モックとは?
モックとは、ソフトウェアのテストを行う際に、本物の部品やサービスの代わりとして用意する、にせもの(代役)の部品のことです。本物そっくりに振る舞うことで、テストをしやすくします。
たとえば、舞台の練習で、まだ完成していない大道具の代わりに段ボールを置いて進めるようなイメージです。本物がなくても、代わりを用意することで先に進められます。
モックは、決められた問いかけに対して、あらかじめ用意した答えを返すように設定できます。これにより、本物に頼らずに、確認したい部分だけを切り出してテストできます。
モックが重要な理由
確認したい部分が、まだできていない部品や外部のサービスに頼っていると、それらがそろうまでテストができません。モックを使えば、本物の代わりを用意して、先にテストを進められます。
また、外部のサービスは、つながり方や状況によって結果が変わることがあります。モックを使えば、いつも同じ条件でテストできるため、結果が安定し、原因も特定しやすくなると考えられます。
モックが使われる場面
モックは、次のような場面で活用されることが多いと考えられます。
- まだ完成していない部品の代わりに、テストを先に進めたいとき
- 外部のサービスに頼らず、いつも同じ条件でテストしたいとき
- 特定の状況(エラーなど)を意図的に再現して確認したいとき
- 確認したい部分だけを切り出してテストしたいとき
モックの仕組み
モックは、おおまかに次のような流れで使われます。手順を順番に見ていきましょう。
- 本物の代わりに用意したい部品を決めます
- その部品が、どんな問いかけにどう答えるかを設定します
- テストの中で、本物の代わりにモックを使うようにします
- 確認したい部分が正しく動くかをテストします
モックは、テストフレームワークの機能を使って用意することが多く、必要に応じて返す答えを自由に設定できるのが特徴です。
モックと似た用語との違い
モックは、似た言葉と混同されることがあります。違いを整理しておきましょう。
「スタブ」は、あらかじめ決めた答えを返すだけの簡単な代役を指すことが多いのに対し、モックは「どう呼び出されたか」まで確認できる、より高度な代役を指すことがあります。区別はやや曖昧ですが、こうした使い分けがされることがあります。
いずれも本物の代わりという点は共通しており、テストをしやすくするための仮の部品だと考えると分かりやすいでしょう。
ここまでモックの役割や使い方を見てきました。続いて、この考え方を理解しておくとどんな良いことがあるのかを整理しておきましょう。
モックを理解するメリット
モックを理解しておくと、テストしたい部分だけを切り出して確認する、という考え方が分かるようになります。これは、効率よく正確にテストを進めるうえで役立つ視点です。
また、本物がそろう前にテストを進められることを知っておくと、開発の流れをより柔軟にとらえやすくなるでしょう。
モックの注意点
モックはあくまで本物の代わりなので、モックを使ったテストがうまくいっても、本物とつないだときに問題が出ないとは限りません。最終的には本物とつないだ確認も必要だと考えられます。
また、モックの設定が実際の振る舞いと食い違っていると、テストの意味が薄れてしまいます。本物に近い形で用意することが望ましいとされています。
モックの理解をさらに深めるために、関係の深い言葉もあわせて知っておくと役立ちます。あわせて覚えておきましょう。
モックに関連する用語
モックをより深く理解するために、関連する用語もあわせて知っておくと役立ちます。
- スタブ:決めた答えを返す簡単な代役の部品
- 単体テスト:部品を一つずつ確認するテスト
- テストフレームワーク:テストを書くための土台
- 結合テスト:部品同士の連携を確認するテスト
まとめ
モックは、テストの際に本物の部品やサービスの代わりとして用意する、代役の部品です。本物に頼らずに確認したい部分を切り出せるため、効率よく安定したテストを支えてくれます。
これからテストについて学んでいくうえで、モックは確認をしやすくするための便利な道具と言えるでしょう。まずは「本物の代わりを用意する」という考え方を押さえておくとよいでしょう。
よくある質問
モックとスタブはどう違いますか?
明確に区別されないこともありますが、スタブは決めた答えを返すだけの簡単な代役、モックはどう呼び出されたかまで確認できる代役を指すことがあります。どちらも本物の代わりという点は共通しています。
モックを使えば本物とのテストは不要ですか?
不要にはなりません。モックはあくまで代役なので、本物とつないだときに問題が出ないとは限りません。最終的には本物と連携させた確認も行うのが望ましいと考えられます。
モックはどうやって用意しますか?
テストフレームワークの機能を使って用意することが多いです。どんな問いかけにどう答えるかを設定できるため、確認したい状況に合わせて柔軟に使えるのが特徴だと考えられます。

