我不清楚as_null_object
的目的是什么,以及在什么情况下你会使用它?根据关于Relish的文件:
使用
as_null_object
方法忽略任何不是的消息 明确地设置为存根或消息期望。
没有注册。
答案 0 :(得分:12)
当您不关心对象的行为或交互时,请使用null对象,并且不希望显式地删除所需的所有内容。使用null对象上的任何参数调用任何方法都不会产生NoMethodError
或ArgumentError
。另请参阅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”的其他消息(执行其他方法),则此示例将不会监听它们,将测试隔离到您实际要在此处测试的内容。