LoginSignup
0
0

はじめに

Rspecでテストを実装する際に、モックスタブの言葉を何回も聞いたことがあるかなと思います。
(無かったらすいません...🙇)

自分の中で明確に言語化できているわけでは無かったので、これを機に整理して、言語化できるよう、アウトプットいたします。

スタブとは

オブジェクトのメソッドが特定の値を返すように設定する、いわゆるダミー部品です。

よく使用されるのが、外部APIを使用している実装をテストするときです。
外部APIを本当に走らせてしまうのはまずいので、スタブを実装します。

rspecで実装すると、以下になります。

allow(hoge).to receive(:fuga).with('foo').and_return(75)

.and_return()で、値を設定しているのを、みたことはある方も多いと思います。
このように、他の部分の動作に影響を与えることなく、特定のメソッドが返す値を指定したい場合に便利です。

モックとは

オブジェクトのメソッドが呼び出されたかどうか、および呼び出された際の引数を検証するために使用します。

モックオブジェクトを作成して、そのオブジェクトに対して呼び出しがあるかを検証します。

rspecで実装すると、以下になります。

hoge_mock = instance_double("Hoge")
expect(hoge_mock).to receive(:fuga).with("hogehoge")

rspecでは、instance_doubleメソッドが存在します。
これで、Hogeオブジェクトに対するモックを作成することができます。

あとは、そのモックに対して、該当メソッドが呼び出されているかを検証します。

まとめ

もう一度整理です。

  • スタブ:メソッドが特定の値を返すように設定するもの
  • モック:メソッドが呼び出されたかどうか、検証するために使用

調べてみると、スタブやモックはテストダブルの種類に含まれるそうです。

言葉の意味を理解した上で、テストを見てみると、より理解が深まるかなと思います。
自分も実装する際には、言語化しつつ、テストを実装するよう心がけます。

最後までご覧いただき、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0