2009-05-31 11 views
16

La ejecución de este código:que imita un método que devuelve una clase sellada en RhinoMocks

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

Cuando

public interface IBar 
{ 
    string Foo(); 
} 

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

tiros NotSupportedException - "No se puede crear burla de clases cerradas". Entiendo por qué no se puede burlar de una clase sellada (aunque hay soluciones en TypeMock), pero ¿cuál es el problema con burlarse de una clase que devuelve una clase sellada (cadena)?

+0

Esto debería funcionar como interfaces de I a menudo simulacros que tienen métodos que devuelven cadenas. Sospecho que tienes otro problema. ¿Podemos ver más código? – tvanfosson

+0

Funciona para mí ahora, no estoy seguro de cuál fue el problema. – ripper234

+2

Tengo el mismo problema cuando intento depurar. Correr sin depuración funciona bien. –

Respuesta

23

burla de Rhino parece ser la captura y manejo de esta excepción. Solo lo ve en VS.NET Debugger si habilitó excepciones como puntos de interrupción. Parece que puede continuar ejecutando de forma segura más allá de este punto de interrupción de excepción y todo funciona como se espera.

+0

golpear "continuar" hace el truco! – DanielV

1

el código funciona correctamente. Es probable que tenga algún otro código que no se muestra y que está causando el problema. Publique su prueba de unidad completa aquí y diagnosticaremos el problema por usted.

1

que tienen el mismo problema, tiene que haber alguna configuración del estudio de depuración VS o algunos de los derechos de acceso suficientes para Rhino se burla supongo. Estoy bastante seguro de que no es el código que está causando esto.

2

Esto sucede cuando NO has habilitado "Solo mi código" en Herramientas-> Opciones-> Depuración-> General, y tienes excepciones CLR, "Lanzado" seleccionado en Depurar-> Excepciones. La forma más sencilla de solucionarlo es habilitar "solo mi código" en Herramientas-> Opciones-> Depuración-> General.

enter image description here

0

Me segundo que - no es un problema con el código. Es la configuración de depuración VS.

tengo la misma excepción, mientras que en depuración en el código de abajo, al intentar enviar Arg.Is.Anything como un parámetro a un trozo.

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

La excepción se maneja y funciona el código/burlarse como se esperaba, acaba de hacer F5

Cuestiones relacionadas