1

stubとにかく実際のクラスをテストする必要があるのに、なぜ使用するのでしょうか?

他のクラスをテストしたくない場合や、関連する他のクラス メソッドを使用したくない場合があることは承知していますが、それでも実際のメソッドを使用する方がよいと思います。

あるメソッドに関連する他のタスクをすばやくスキップして、テストで使用する最終結果を返したい場合にのみ、私は本当にメリットを見ることができます

私たちが考慮すべき他の利点はありますか?

(上記に加えてstub、コードが進化するにつれて変更される可能性があり、テストで生成しているものとは異なる出力を生成する可能性があるため、リスクもあると思います)

4

1 に答える 1

1

実行しているテストによって異なります。単一のクラスのみをテストする単体テストでは、スタブが役立ちます。

例として、他のオブジェクトがdid_it!操作を終了したときに電子メールを送信するクラスをテストしているとします。

describe Emailer do
  context ".send_email" do
    it "sends an email if another object 'did_it!'" do
      obj = Obj.new
      Emailer.send_email(obj).should == true # the email sends successfully
    end
  end
end

この場合、obj.did_it!非常にコストのかかる操作である場合、または断続的に失敗する可能性がある場合、このテストに問題が発生する可能性があります。

ただし、このテストでは、返されEmailer.send_emailたときに正しく実行されることのみを気にします。メソッドが機能するかどうかは気にしません。これはテストしていないためです。obj.did_it!trueobj.did_it!

obj.did_it!したがって、スタブを使用して、「成功すると仮定すると、Emailer.send_email実際に電子メールを送信しますか?」と言うことができます。

describe Emailer do
  context ".send_email" do
    it "sends an email if another object 'did_it!'" do
      obj = stub(:did_it! => true)
      Emailer.send_email(obj).should == true # the email sends successfully
    end
  end
end
于 2013-08-28T15:24:07.740 に答える