2012-05-04 4 views
14

as_null_objectの目的はどのようなもので、どのようなシナリオで使用するのかはわかりません。レリッシュのドキュメントによると:RSpec - as_null_object?

明示的にスタブやメッセージの期待として設定 ではありません任意のメッセージを無視するas_null_objectメソッドを使用します。

私に登録していません。

答えて

12

オブジェクトの動作や相互作用を気にせず、必要なものすべてを明示的にスタブする必要がない場合は、nullオブジェクトを使用します。 nullオブジェクトで引数を指定してメソッドを呼び出すと、NoMethodErrorまたはArgumentErrorにはなりません。 Null Object PatternのWikipediaエントリーも参照してください。

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の初期化コードは、この例で、「some_method」ではないというMY_OBJECTする他のメッセージ(他の方法を実行)を送信した場合実際にここでテストしたいものにテストを分離して、彼らの話を聞くことはありません。