私はrspecとTDD方法論全体でかなり新しいです。誰かがモックとスタブの違いを説明できますか?いつそれらを使用するのですか?テストケースでは、Factory Girlを使用してオブジェクトを作成するのはいつですか?モック、スタブ、工場の女の子の違いは何ですか?
答えて
ありませんよ。テスト中にテストで使用できないオブジェクトで作業する必要がある場合は、そのオブジェクトがどのように動作して動作するかを概算するためのモックを使用できます。スタブは、同様の方法で使用できますが、オブジェクトの個々のメソッドで使用できます。ここで
は、両方の多くを使用しての、むしろ不自然な例です:
class Client
def connect_to_server
if Server.connect.status == 'bad'
show_an_error
else
do_something_else
end
end
def do_something_else; end
def show_an_error; end
end
context "failure" do
it "displays an error" do
bad_network_response = double("A bad response from some service", :status => 'bad')
Server.should_receive(:connect).and_return(bad_network_response)
client = Client.new
client.should_receive(:show_an_error)
client.connect_to_server
end
end
あなたはモックやスタブの多くを使用することは悪い考えであることを想像することができます。これは基本的にテストでコードの一部を隠していますが、難しい/まれなテストシナリオでは簡単に解決できます。
工場ガールは、テスト用のデータを生成するのに便利です。あなたはモデルを作成するためのレシピとして工場を使用しますが、多くのテストデータを含むものをテストする必要があるかもしれませんが、これはフィクスチャを使用できず、複雑なオブジェクトを明示的に作成するのは面倒です。
あなたの最初のピットストップは、Martin Fowler氏の有名な記事である:Mocks are not Stubs
編集
Mocks
とStubs
はTest Doubles(Mezaros用語)のタイプの2つです。テストダブルは、通常、テスト中のシステム(またはテスト中のクラス)が必要とする依存関係をシミュレートするために使用されるため、SUT/CUTはその依存関係とは独立してテストされます。 (警告 - Jeff hereにより述べたように、正確な用語はかなり厄介な被写体、例えばすることができる)
ウィキペディア:
- "Test stubs provide canned answers"
- "mock objects can simulate the behavior of complex, real objects"
例
- スタブメソッドはちょうど一定の値wを返すかもしれないSUTによって呼び出された鶏、例えば。 SUTの特定のテストケースを実施するためのものである。
*
フレームワークMockito(Java)とMoq(.Net)のようなフレームワークを使用すると、依存関係のインターフェイスに対して、最低限のコードで即座にモッククラスを構築し、SUTがモックと正しく相互作用したかどうか、例えばSUTがモックのメソッドを正しい回数だけ正しいパラメータで呼び出したことを確認することによって、
*免責事項 - 私はあなたが偽のオブジェクトとしてモック(またはダブル)を考えることができルビーdevの
これを読んだら、[TABの捏造](http://avdi.org/devblog/2011/09/06/making-a-mockery-of-tdd/)に移動することができます –
- 1. 工場の女の子とUser.create - 違いは何ですか?
- 2. 工場の女の子 - 目的は何ですか?
- 3. 工場の女の子MiniTest
- 4. キュウリとRspec工場工場の女の子工場
- 5. 工場の女の子一意性検証は、関連工場
- 6. Rspec工場の女の子の問題
- 7. rspecと工場の女の子との工場の重複エラー?
- 8. 工場女の子団体とスパークの相違
- 9. 工場の女の子 - 理解団体
- 10. すぐにガードと工場の女の子と工場をリントするには?
- 11. Rhino Mocks:スタブとモック。違いは何ですか
- 12. 工場の女の子:同じオブジェクトを何回か使用する
- 13. RSpec、Devise、工場の女の子でコントローラをテストする
- 14. Rspecと工場の女の子でbefore_saveコールバックをテストする
- 15. 工場の女の子 - 関連するレコードを作成する
- 16. RSpecでは、スタブの違いは何ですか?とスタブ?
- 17. 工場の女の子:has_many/throughアソシエーションを設定する方法
- 18. RSPECと工場の女の子SystemStackError:スタックレベルが深すぎ
- 19. 工場の女の子の非アクティブなアソシエーションの問題
- 20. Rails 3 - belongs_toテーブルのための工場の女の子とシーケンス
- 21. 工場とパイプラインの設計パターンの違いは何ですか?
- 22. 工場の女の子の従属属性
- 23. 工場の女の子との不具合
- 24. スタブでAssertWasCalledメソッドを呼び出せれば、モックとスタブの違いは何ですか?
- 25. パラノイアと工場の女の子によるソフト削除
- 26. 工場女の子未定義の変数
- 27. 工場とコントローラの違いは何ですか?
- 28. 初期化されていない定数ApplicationRecordは工場の女の子ですか?
- 29. 多くのスルーと存在のバリデーションを持つ工場の女の子のオブジェクト
- 30. Rails 3 - 工場の女の子の宝石 - belongs_toとhas_oneの関係
私は間違っている可能性がありますが、私はあなたがスタブに誤っていると思っています。スタブオブジェクトやモックオブジェクト、またはスタブされたメソッドやモックされたメソッドを持つことができます。違いは、それらをどのように使用しているかです。スタブは実際に別の依存関係を呼び出さずにテストを実行するだけです。モックは同じことをしますが、呼び出しが必要であり、テストの一部です。スタブとモックの両方を持つ擬似オブジェクトを持つことができます。 Rspecはモックの代わりに "ダブル"と呼んでいます。 – fregas