Domanda

Sto usando RhinoMocks ultimamente ma io continuo a correre in un problema. Se io passare al debugger e scavalcare il codice, mentre un finto è in modalità di registrazione, finisco per ottenere un'eccezione lungo le linee di:

System.InvalidOperationException: Previous method 'SuchAndSuch.ToString();'  
requires a return value or an exception to throw.

Ma se eseguo lo stesso codice senza rompere nel debugger eseguirà con successo e creare il finto.

Sono abbastanza sicuro che la ragione di questo è che il debugger chiama ToString () sugli oggetti per visualizzarli nei locali e altre finestre Watch. Ma dal momento che il mock è in modalità di registrazione RhinoMocks considera una chiamata a ToString () per essere una messa a punto delle aspettative che poi non è del tutto corretto. Ovviamente questo si verifica solo con mock parziali classi concrete. Schernisce contro interfacce non presentano questo comportamento.

avere altre persone incorrere in questo problema? C'è qualche semplice rimedio? Do altri framework come moq o TypeMock hanno questo problema?

Grazie,

~ Justin

È stato utile?

Soluzione

posso ricordare avendo un problema simile con NMock molti anni fa. Fondamentalmente, questo problema si verifica proprio perché il debugger richiama e visualizza le proprietà utilizzando il metodo ToString (a meno che non si utilizza DebuggerDisplayAttribute o simili).

Questo può essere particolarmente problematico se si utilizza schernisce severe , perché solo consentono di richiamare un membro il numero di volte specificato, e il debugger interferisce con questo. Usando deride sciolti gli indirizzi questi (e molti altri) problemi.

Si consiglia inoltre di allontanarsi dal meccanismo di registrazione / riproduzione di Rhino Mocks e iniziare a utilizzare il più recente e molto meglio lambda sintassi .

Moq utilizza la sintassi Lamda (quasi) esclusivamente, e non ho mai avuto tali problemi con esso -. Ma poi di nuovo, non mi eseguire il debug di molto in questi giorni, come test di unità sono diventati un sostituto per il debug

Ancora un altro rimedio è semplicemente quello di nascondere il Auto e La gente del posto finestre del debugger.

Altri suggerimenti

Come Mark suggerito, questo problema dovrebbe andare via se si smette di usare il record-riproduzione-verificare approccio e iniziare a usare stub con l'approccio AAA consigliato (organizzare, atto, asserire) invece.

Ho cercato di spiegare la differenza e come fare entrambe le cose con Rhino Mocks in questo post sul blog .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top