RSpec - as_null_object?

时间:2012-05-04 03:07:27

标签: ruby rspec2

我不清楚as_null_object的目的是什么,以及在什么情况下你会使用它?根据关于Relish的文件:

  

使用as_null_object方法忽略任何不是的消息   明确地设置为存根或消息期望。

没有注册。

2 个答案:

答案 0 :(得分:12)

当您不关心对象的行为或交互时,请使用null对象,并且不希望显式地删除所需的所有内容。使用null对象上的任何参数调用任何方法都不会产生NoMethodErrorArgumentError。另请参阅Null Object Pattern上的维基百科条目。

答案 1 :(得分:8)

The RSpec Book解释了这一点。我建议你阅读它。

  

... as_null对象告诉模拟对象只监听我们告诉它的消息   期待,并忽略任何其他消息。

因此,假设您的一个示例包含以下代码:

...
my_object = mock("my_object" ).as_null_object
other_thing = OtherThing.new(my_object)
my_object.should_receive(:some_method).with("string parameter value")
...

如果OtherThing的初始化代码向my_object发送不是“some_method”的其他消息(执行其他方法),则此示例将不会监听它们,将测试隔离到您实际要在此处测试的内容。