que polimorfico metodos metodo herencia español clases clase abstracta c# mocking rhino-mocks stub sealed

c# - polimorfico - Burlarse de un método que devuelve una clase sellada en RhinoMocks



sealed c# que es (5)

Tu 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.

Ejecutando este código:

_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(); } }

throws NotSupportedException - "No se pueden crear burlas de clases selladas". 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)?


Tengo el mismo problema, supongo que tiene que ser alguna configuración de depuración de VS Studio o algunos derechos de acceso insuficientes para rinocerontes. Estoy bastante seguro de que no es el código que está causando esto.


Parece que Rhino Mocks atrapa y maneja 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.


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.


En segundo lugar, no es un problema con el código. Es la configuración de depuración VS.

Obtengo la misma excepción mientras estoy depurando el código siguiente, al intentar enviar Arg.Is.Anything como parámetro a un stub.

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

La excepción se maneja y el código / burla funciona como se esperaba, solo haz F5