RSpec - as_null_object?

ker*_*lin 15 ruby rspec2

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

使用该as_null_object方法可以忽略未明确设置为存根或消息期望的任何消息.

没有在我这里注册.

And*_*all 12

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


Chr*_*ian 8

RSpec书解释了这一点.我建议你阅读它.

... 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")
...
Run Code Online (Sandbox Code Playgroud)

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