2011-01-08 14 views
5
public interface ICell 
     { 
      int Value{get;} 

      void IncrementValue(); 
     } 

Voglio creare uno stub per questa interfaccia in RhinoMocks. Ho una proprietà di sola lettura e voglio incrementare il suo valore ogni volta che chiamo il metodo IncrementValue(). È possibile? Non voglio creare una classe nuova per questo stub.Stub il comportamento di una proprietà readOnly

risposta

3

Ho una proposta simile a Jay, appena più breve. Non sono sicuro se questo ha alcuni inconvenienti.

int count = 0; 

    var mock = MockRepository.GenerateStub<ICell>(); 
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42); 
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => { 
     count = (int)count+1; 
    }); 

ritorno (42) è messo lì a dire "Value restituisce qualcosa, non buttare" e WhenCalled (a => a.ReturnValue = conteggio) le sostituzioni che restituiscono Vale 42 con valore corrente del conteggio.

0

È possibile dare a Rino Mock un lambda da eseguire quando viene chiamata una funzione. Questo lambda può quindi incrementare un contatore. È possibile trovare un esempio here

+0

credo che il problema di martin è cosa incrementare ... l'interfaccia ha solo una get-property, nessun set –

0

sono arrivato fino a questo troppo:

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0); 

Prima che il vostro aiuto ero confuso con il comportamento del metodo di WhenCalled ... ma penso che il tuo approccio è migliore di questo