2011-10-11 7 views
6

Come posso forzare un oggetto stub in RhinoMocks per restituire un metodo void su di esso?Come posso applicare un metodo di annullamento per restituire Void da un oggetto Stub?

Prendete questo esempio:

public interface ICar 
{ 
    string Model {get;set;} 
    void Horn(); 
} 

ICar stubCar= MockRepository.GenerateStub<ICar>(); 
stubCar.Expect(c=>c.Horn()).Return(//now what so that 
            // it returns nothing as the meth. returns void ? 
+0

Se è definito con un tipo di reso vuoto, come può restituire qualcosa? – CodingGorilla

+0

La mia preoccupazione era che se non lo avessi fatto per rendere nulla, la chiamata a questo stub genererà un'eccezione. Ho provato e ho visto: Jon aveva ragione! – pencilCake

risposta

8

Il metodo non può restituire un valore - è un metodo vuoto. Il CLR non let tenta di restituire un valore. Non è necessario testare per questo.

È necessaria solo la chiamata Expect.

6

Il metodo Return() non è valido per una chiamata al metodo void. Piuttosto si desidera qualcosa di simile:

ICar stubCar= MockRepository.GenerateStrictMock<ICar>(); 
stubCar.Expect(c=>c.Horn()); 
stubCar.DoSomethingThatIsSupposedToCallHorn(); 
stubCar.VerifyAllExpectations(); 

che vi dirà se o non Horn() è stato chiamato.

Ecco come si testano i metodi di annullamento durante la verifica dell'unità. Effettuare le seguenti operazioni:

  1. Impostare un'aspettativa (Expect())
  2. Chiamare il metodo che dovrebbe richiamare l'aspettativa
  3. Verificare che il metodo previsto è stato chiamato.
+0

Non penso che funzionerà perché stai usando uno Stub not a Mock, e gli stub passeranno sempre VerifyAllExpectations vedi: http://www.wrightfully.com/it-rhino-mocks-verifyallexpectations-vs-assertwascalled/ – crabCRUSHERclamCOLLECTOR

+0

Quello dovrebbe essere un rigoroso finto. Lo cambierò. Grazie per averlo capito. –