1

我正在阅读rspec-mocks并对 Message Expectations 感到有些困惑。

消息期望是测试替身将在示例结束前的某个时间收到消息的期望。如果收到消息,则期望得到满足。如果不是,则示例失败。

validator = double("validator")
validator.should_receive(:validate).with("02134")
zipcode = Zipcode.new("02134", validator)
zipcode.valid?

所以我的理解是你创建一个虚拟对象并指定它应该“接收”一条带有参数的消息(这是来自 ActiveModel的验证02134) 。如果它在某个时候这样做,那么这个测试将通过。

我的问题是:

  1. 为什么能validator传到Zipcode.new?您的应用程序代码是否应该接受额外的参数(测试替身)?

  2. “接收消息”对于测试替身究竟意味着什么?这是否意味着它将被消息(在本例中为validate方法)调用?

谢谢!

4

1 回答 1

2

Ruby 中没有类型,因此您可以将任何对象发送到任何方法。这回答了你的1

对于您的2

双打非常棒,因为要测试一个独立的方法,你实际上不需要一个完整的对象。

should_receive(:foo)方法:

  • 您希望您的替身收到该foo方法(your_double.foo某处)

  • foo不会被调用,但它可以返回您想要(使用and_return)的结果以继续您的规范。

于 2013-03-07T15:37:03.167 回答