gpt4 book ai didi

ruby - Allow vs Stub,有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:08 24 4
gpt4 key购买 nike

以下几行 (rspec) 代码之间有什么区别,无论它们相同还是不同,什么时候应该使用一个而不是另一个?

book = double("book")
allow(book).to receive(:title) { "The RSpec Book" }

对比

book = double("book")
book.stub(:title).and_return("The RSpec Book")

最佳答案

有2处不同,但结果完全一样。两者都与 rspec 模拟/期望语法有关。

  1. 使用#allow 而不是#stub 方法。第一个案例使用今年推出的新 rspec 语法。 这是现在使用 rspec 的首选方式。虽然旧语法没有被弃用,但它可能在 rspec3 中默认被禁用。来自 rspec 维护者的关于此主题的更多信息: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax http://myronmars.to/n/dev-blog/2013/07/the-plan-for-rspec-3

  2. 使用 block 而不是#and_return 来定义返回值。这与提到的语法更改无关;这两种方法已经可用了很长一段时间(自 rspec 1 起)。使用#and_return 方法更合适,因为它是 (a) 默认方式,(b) 更具可读性,并且 (c) 没有任何运行时开销。使用 block 的第二种方法通常保留给极端情况,当您希望返回更具动态性质的东西时 - 不是常量,而是某种计算。

您的问题的答案是结合使用两者:

  • 使用#allow 代替#stub
  • 使用#and_return 而不是 block ,除非你需要返回动态计算的值

例如:

book = double('book')
allow(book).to receive(:title).and_return('The RSpec Book')

关于ruby - Allow vs Stub,有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com