Help us understand the problem. What is going on with this article?

【Ruby on Rails】RSpecにおけるモックとスタブの基本事項メモ【プログラミング学習開始142日目】

More than 1 year has passed since last update.

はじめに

個人用のメモです。

Railsチュートリアルを完走し、現在、Everyday Rails - RSpecによるRailsテスト入門を用いてRSpecの勉強を進めていたところ、10章にて「モックとスタブ」というものが出てきました。

初見ではあまり理解できなかったため、それぞれの定義や文法などの基本をさらうべくまとめてみました。

モックとスタブの定義・特徴・文法

モック

  • テスト用の影武者として働くオブジェクト。
  • データベースへのアクセスなしで生成される(=テストの時短に繋がる)。
  • doubleを用いて影武者を生成

スタブ

  • テスト用のダミーメソッド。
  • データベースやネットワークを使うメソッドをデータベースへのアクセスなしで呼び出す。
  • allow(モデル名).to メソッドを用いてダミーメソッドを作成

使用例

  • 以下の例ではuser = double("user", name: "Fake User")のようにdoubleを用いてモック(=影武者ユーザー)を生成している。
  • allow(note).to receive(:user).and_return(user)はNoteモデルに#userメソッドがある場合に、欲しい結果(user)を返すという処理
  • このようにモックとスタブの使用によって、ユーザーを永続化しない、且つ、データベース上でのユーザー検索をしないテストが記述できるようになる
spec/models/note_spec.rb
it "delegates name to the user who created it" do
 user = double("user", name: "Fake User")
 note = Note.new
 allow(note).to receive(:user).and_return(user)
 expect(note.user_name).to eq "Fake User"
end

Everyday Rails - RSpecによるRailsテスト入門の10章・モックとスタブの項にて出てきたコードを例としてお借りしています。

まとめ

  • モック・スタブによってデータベースにアクセスせずにオブジェクトやメソッドを使用できる。
  • テストが早くなるというメリットがある。
  • doubleでモックを生成、allow(モデル名).to メソッドでスタブを作成する。

参考書籍・URL

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした