16

我不清楚它的目的as_null_object是什么,你会在什么情况下使用它?根据 Relish 上的文档:

使用该as_null_object方法忽略任何未明确设置为存根或消息预期的消息。

没有在我这里注册。

4

2 回答 2

13

当您不关心对象的行为或交互,并且不想显式地将所有需要的内容存根时,请使用空对象。在 null 对象上使用任何参数调用任何方法都不会导致 aNoMethodErrorArgumentError。另请参阅关于Null Object Pattern的 Wikipedia 条目。

于 2012-05-04T03:20:03.753 回答
9

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”的其他消息(执行其他方法),则此示例将不会监听它们,从而将测试与您在此处实际要测试的内容隔离开来。

于 2012-05-04T03:20:05.630 回答