2012-05-04 7 views
14

No está claro para mí cuál es el propósito de as_null_object y en qué escenarios lo usaría? De acuerdo con la documentación sobre el condimento:RSpec - as_null_object?

Utilice el método as_null_object hacer caso omiso de cualquier mensaje que no son establecer explícitamente como talones o las expectativas de mensajes.

No me inscribo.

Respuesta

12

Utilice un objeto nulo cuando no le importe el comportamiento o la interacción del objeto, y no desee rescindir explícitamente todo lo que sea necesario. Llamar a cualquier método con cualquier argumento sobre un objeto nulo no dará como resultado un NoMethodError o ArgumentError. Vea también la entrada de Wikipedia en el Null Object Pattern.

8

The RSpec Book explica esto. Te recomiendo que lo leas

... as_null objeto cuenta el objeto burlado solo para escuchar los mensajes que nos decimos a esperar, e ignorar cualquier otro mensaje.

Así, supongamos que uno de sus ejemplos tiene el siguiente código:

... 
my_object = mock("my_object").as_null_object 
other_thing = OtherThing.new(my_object) 
my_object.should_receive(:some_method).with("string parameter value") 
... 

Si el código de inicialización para OtherThing envía otro mensaje (ejecuta otros métodos) a mi_objeto que no son "some_method", este ejemplo no los escuchará, aislando la prueba de lo que realmente quiere probar aquí.