はじめに
こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。
本記事では、RSpecでのモックの使い方についてまとめます。
目次
モックとスタブについて
外部に依存する部分をテスト時に仮のオブジェクトで置き換える手法のことです。例えば外部のAPIを使うシステムのテストをするとき、モックやスタブを使わずにテストをすると、APIが正常に動いていない場合、テストが通らなくなってしまいます。つまり APIサービスが落ちていたり、エラーになっている時にはテストを実行しても失敗してしまいます。その他にも、ネットワークの遅延や、レスポンスが変動することで、テストが不安定になります。本来確認したい内容は、APIの状況ではなく、自分が作ったプログラムが正しく動いているかなので、このような状況で、APIをモックやスタブで置き換えることにより、外部の状況に左右されず、作ったシステムが正しく動いているか確かめることができます。
モックを使う目的
モックの目的は、「メソッドが正しい引数で呼ばれたか」「呼び出しの回数」などの振る舞いを検証することです。
例えば、外部の API が正しく呼び出されたか、指定した引数で実行されたかを確認したい場合にモックを使用します。
外部 API やメール送信など、実際の処理を行わず、呼び出しだけをテストしたい場合に便利です。
スタブを使う目的
スタブの目的は、「外部依存の応答を仮定し、プログラムのロジックをテストする」ことです。
API などの外部サービスに依存する処理があっても、スタブを使えばその部分を固定の返り値に置き換えてテストを進められます。
モックとスタブの違いと使い分け
-
モック(Mock)
→ メソッドが正しく呼ばれたか(引数・回数も含めて)を検証する。 -
スタブ(Stub):
→ 特定の値を返すように置き換えて、プログラムのロジックをテストする。
モックとスタブの書き方
モックの書き方
expect(オブジェクト).to receive(:メソッド).with(引数).and_return(返り値)
スタブの書き方
allow(オブジェクト).to receive(:メソッド).and_return(返り値)
最後に
最後まで読んでいただきありがとうございました。
RSpecでモックやスタブを使用することで、外部依存を取り除いた効率的なテストが可能になります。
この記事を読んでモックの基本的な使い方や具体例について理解が深まれば幸いです。