16

目的がas_null_object何であり、どのようなシナリオでそれを使用するのか、私にはわかりません。レリッシュのドキュメントによると:

このメソッドを使用してas_null_object、スタブまたはメッセージ期待値として明示的に設定されていないメッセージを無視します。

私に登録していません。

4

2 に答える 2

13

オブジェクトの動作や相互作用を気にせず、必要なものすべてを明示的にスタブしたくない場合は、nullオブジェクトを使用します。nullオブジェクトに対して引数を指定してメソッドを呼び出しても、またはは発生しませNoMethodErrorArgumentErrorNullObjectPatternのWikipediaエントリも参照してください。

于 2012-05-04T03:20:03.753 に答える
9

RSpecブックはこれを説明しています。読むことをお勧めします。

... as_nullオブジェクトは、モックされたオブジェクトに、予期するように指示したメッセージのみをリッスンし、他のメッセージを無視するように指示します。

したがって、例の1つに次のコードがあるとします。

...
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に送信する(他のメソッドを実行する)場合、この例はそれらをリッスンせず、ここで実際にテストしたいものにテストを分離します。

于 2012-05-04T03:20:05.630 に答える