double / spy / instance_double / instance_spy の違い
#rspec
double
使うメソッドは定義しないといけない
Test Doubles - Basics - RSpec Mocks - RSpec - Relish(https://relishapp.com/rspec/rspec-mocks/docs/basics/test-doubles)
spy
使うメソッドは自動的に定義される
定義していないメソッドも使えるし、メソッドチェーンもできる
Spies - Basics - RSpec Mocks - RSpec - Relish(https://relishapp.com/rspec/rspec-mocks/docs/basics/spies)
doubleとspyは空のスタブを作る
テスト対象クラスにないメソッドも提議できるし、エラーにならない
#Rspec での double と spy の違い ( Rspec double and spy : behaviour difference ) - Qiita(https://qiita.com/YumaInaura/items/646a7c1240cffae94657)
instance_double も instance_spy も、Verifying Double と呼ばれるオブジェクトを返す
テストダブル対象のインスタンスに存在しないメソッドがスタブされた場合や、引数が異なる形式でメソッドが呼び出された場合にエラーを起こしてくれる
ただの #double #spy はエラーが起こらない
存在しないメソッドをコールしても良いし、実際の異なる引数形式でメソッドを呼び出しても良い「何でもあり」な状態
instance_doubleとinstance_spyの使い分け(https://mogulla3.tech/articles/2020-07-04-01)
https://www.simplybusiness.co.uk/about-us/tech/2020/05/rspec-instance-doubles/
違いがよく纏まってる
https://www.netguru.com/blog/ruby-tests-rspec-mocks