我正在阅读rspec-mocks,并对Message Expectations感到困惑。
消息期望是测试双倍的期望 在示例结束之前的某个时间收到消息。如果消息是 收到了,期望得到满足。如果没有,则示例失败。
validator = double("validator") validator.should_receive(:validate).with("02134") zipcode = Zipcode.new("02134", validator) zipcode.valid?
所以我的理解是你创建一个虚拟对象并指定它应该“接收”一个消息(来自ActiveModel的这个validate)并带有参数02134
。如果它在某个时刻发生,则该测试将通过。
我的问题是:
为什么可以将validator
传递给Zipcode.new
?您的应用程序代码是否应该采用额外的参数(测试双精度)?
“收到消息”对于测试双重意味着什么?这是否意味着它将被消息调用(在这种情况下是validate
方法)?
谢谢!
答案 0 :(得分:2)
Ruby中没有类型,所以你可以向任何方法发送任何对象。这会回答您的1
对于2
:
双打非常棒,因为要测试一个孤立的方法,实际上你不需要一个完整的对象。
should_receive(:foo)
表示:
您希望双人获得foo
方法(某处your_double.foo
)
foo
将不会被调用,但它可以返回您想要的结果(使用and_return
)来继续您的规范。