2012-05-04 6 views
14

Non mi è chiaro quale sia lo scopo di as_null_object e in quali scenari lo utilizzeresti? Secondo la documentazione su Relish:RSpec - as_null_object?

Utilizzare il metodo as_null_object ignorare eventuali messaggi che non sono esplicitamente impostare come stub o le aspettative dei messaggi.

Non mi sta registrando.

risposta

12

Utilizzare un oggetto nullo quando non si cura del comportamento o dell'interazione dell'oggetto e non si desidera interrompere in modo esplicito tutto ciò che è necessario. Chiamare qualsiasi metodo con qualsiasi argomento su un oggetto nullo non comporterà uno NoMethodError o ArgumentError. Vedi anche la voce di Wikipedia su Null Object Pattern.

8

The RSpec Book spiega questo. Ti consiglio di leggerlo

... as_null oggetto racconta l'oggetto preso in giro ad ascoltare solo per i messaggi che dirgli di aspettarsi, e ignorare eventuali altri messaggi.

Quindi, supponiamo uno dei tuoi esempi ha il seguente codice:

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

Se il codice di inizializzazione per OtherThing invia altri messaggi (esegue altri metodi) a my_object che non sono "some_method", questo esempio non li ascolterà, isolando il test su ciò che in realtà vuoi testare qui.