2009-05-31 6 views
16

L'esecuzione di questo codice:derisione un metodo che restituisce una classe chiusa in RhinoMocks

_foo = MockRepository.GenerateStub<IBar>(); 
_foo.Stub(x => x.Foo()).Return("sdf"); 

Quando

public interface IBar 
{ 
    string Foo(); 
} 

public class Bar : IBar 
{ 
    public string Foo() 
    { 
     throw new NotImplementedException(); 
    } 
} 

tiri NotSupportedException - "Impossibile creare mock di classi sigillate". Capisco perché non si può prendere in giro una classe sigillata (anche se ci sono soluzioni in TypeMock), ma qual è il problema con la simulazione di una classe che restituisce una classe sigillata (stringa)?

+0

Questo dovrebbe funzionare come I interfacce spesso finti che hanno metodi che restituiscono stringhe. Sospetto che tu abbia un altro problema. Possiamo vedere più codice? – tvanfosson

+0

Funziona per me ora, non so quale fosse il problema. – ripper234

+2

Ho lo stesso problema quando provo a eseguire il debug. L'esecuzione senza debug funziona correttamente. –

risposta

23

Rhino Mocks sembra catturare e gestire questa eccezione. Lo vedi solo nel debugger VS.NET se hai abilitato le eccezioni come punti di interruzione. Sembra che tu possa tranquillamente continuare a correre oltre questo breakpoint di eccezione e tutto funzioni come previsto.

+0

colpire 'continua' fa il trucco! – DanielV

1

Il tuo codice funziona correttamente. Probabilmente hai qualche altro codice non mostrato che sta causando il problema. Pubblica qui il tuo test completo e ti diagnosticeremo il problema.

1

Ho lo stesso problema, deve esserci qualche impostazione di debug in studio VS o alcuni diritti di accesso insufficienti per i mazzi di rinoceronte credo. Sono abbastanza sicuro che non è il codice che sta causando questo.

2

Questo succede quando NON hai "Solo il mio codice" abilitato in Strumenti-> Opzioni-> Debug-> Generale, e hai eccezioni CLR, "Gettato" selezionato in Debug-> Eccezioni. Il modo più semplice per risolverlo è abilitare "solo il mio codice" in Strumenti-> Opzioni-> Debug-> Generale.

enter image description here

0

I secondi che - non è un problema con il codice. È l'impostazione di debug VS.

Ricevo la stessa eccezione durante il debug nel codice riportato di seguito, durante il tentativo di inviare Arg.Is.Anything come parametro a uno stub.

mockPermissionManager.Stub(item => item.HasAccess(Arg<string>.Is.Anything)).Return(true); 

L'eccezione è gestita e codice/beffardo funziona come previsto, basta fare F5