我想模拟一个对象,它可能会收到我不关心的任意数量的消息。我希望这个对象有一个默认答案,例如“真”,能够在重要的地方添加特定的方法和答案。是否可以在 RSpec 中执行此操作?我想要的是这样的:
obj = default_double(default: true, widget_count: 5)
obj.foobar.should == true
obj.widget_count.should == 5
如果我可以传入一个 lambda 或 proc 作为返回值并让 default_double 返回该 lambda 的评估,那就太好了。如果 proc 或 lambda 在测试的上下文中进行评估,并且可以访问示例中可用的变量,那就太好了。
因此,如果添加了上述功能,我们可能会有如下内容:
@widgets = WidgetContainer.new
@widgets.widget_count = 5
obj = default_double(default: true, widget_count: lambda { @widgets.widget_count })
obj.foobar.should == true
obj.widget_count.should == 5
如果读者对此功能的动机感兴趣,那么假设我不想挖掘并找出它可能接收到的所有可能消息,或者可能的消息集非常大或未知。
像这样的东西内置在 RSpec 中吗?