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 回答