Sto facendo delle aspettative ordinate nei burloni di rinoceronte come descritto da ayende nel numero this. Il mio codice simile a questa:Riutilizzo di un simulato verificato
using (_mocks.Ordered())
{
Expect.Call(() => _myMock.CallA());
Expect.Call(() => _myMock.CallB(40));
Expect.Call(() => _myMock.CallA());
}
_mocks.ReplayAll();
_myObjectUnderTest.DoStuff();
_mocks.VerifyAll();
Dopo questo vorrei aggiungere più aspettative e testare più dei metodi di mio oggetto. Voglio farlo perché ho alcuni metodi di test di base che eseguono alcune impostazioni sul mio oggetto test e non voglio dover ripetere il test di questa funzionalità, quindi chiamo semplicemente il metodo di test precedente. Se provo ad aggiungere più aspettative dopo VerifyAll() ottengo un'eccezione: "Questa azione non è valida quando l'oggetto fittizio è in stato verificato."
Parte del mio problema è che non capisco veramente cosa stiano facendo tutte le cose di riesame/verifica, ho appena copiato il codice. Sto usando i mock rigorosi, quindi qualsiasi codice di setup deve avere aspettative corrispondenti o fallisce. Non voglio duplicare le aspettative per il mio codice di configurazione.
C'è un modo per reimpostare il mock in modo che sia pronto per ricominciare da capo?
Il problema si presenta quando voglio testare B, ma A deve essere chiamato per impostare dapprima tutto per B. Se A chiama i metodi sulla mia simulazione, allora devo aspettarmi che usino mock dinamici invece di quelli stretti. Non vorrei duplicare tutte le aspettative, perché ho già provato a fondo A. – captncraig
Sì, ho anche questo problema. Hai due opzioni. Il primo consiste nel modificare la logica aziendale in modo da poter controllare le parti attivate o dividere la logica aziendale in parti più piccole da testare in modo indipendente.La seconda opzione è di sollevare alcune aspettative in un metodo privato del tuo '[TestFixture]' e chiamarlo in entrambi i test. Ho fatto l'ultimo (per ora). –
-1 come ho avuto questo problema, ma ho trovato un modo per aggirare questo che nega questa risposta (vedi altro post - "risposta breve: sì") – brewmanz