1. ホーム
  2. testing

[解決済み] モックとスタブの違いは何ですか?

2022-03-19 04:05:09

質問

テストにおけるモッキングとスタブについて、以下のような様々な記事を読みました。 Martin Fowlerのモックはスタブではない しかし、まだその違いがよくわからない。

どうすればいい?

スタブ

最大の違いは、スタブとは、あらかじめ決められた動作を記述したものであることだと思います。つまり、テスト用に偽装している依存関係(抽象クラスやインターフェースなど)を実装したクラスがあり、そのメソッドは設定されたレスポンスでスタブ化されているだけです。そして、そのメソッドに対応するスタブ化されたコードは、すでにテストの外部で書かれているはずです。

モック

モックは、テストの一部として、あなたの期待に沿うように設定しなければならないものです。モックはあらかじめ決められた方法でセットアップされるわけではないので、テストの中でそれを実行するコードが必要です。ある意味、モックは実行時に決定されます。なぜなら、期待値を設定するコードは、モックが何かをする前に実行されなければならないからです。

モックとスタブの違い

モックを使って書かれたテストは、通常 initialize -> set expectations -> exercise -> verify のパターンでテストします。事前に書かれたスタブが initialize -> exercise -> verify .

MocksとStubsの類似性

両者の目的は、クラスや関数のすべての依存関係をテストすることを排除し、テストがより集中し、証明しようとすることがよりシンプルになるようにすることです。