2010-04-05 18 views
6

Moq permite a los desarrolladores simular miembros protegidos. Estaba buscando la misma funcionalidad en Rhino.Mocks pero no lo encuentro.Cómo simular miembros virtuales protegidos con Rhino.Mocks?

Aquí hay un ejemplo de Moq Quick Start página cómo simular el método protegido.

// at the top of the test fixture 
using Moq.Protected() 

// in the test 
var mock = new Mock<CommandBase>(); 
mock.Protected() 
    .Setup<int>("Execute") 
    .Returns(5); 

// if you need argument matching, you MUST use ItExpr rather than It 
// planning on improving this for vNext 
mock.Protected() 
    .Setup<string>("Execute", 
     ItExpr.IsAny<string>()) 
    .Returns(true); 

Dejarme saber si persigo algo que no sale.

+0

Usted Quizás desee consultar este enlace http://geekswithblogs.net/MattRobertsBlog/archive/2008/12/16/how-to-make-a-quotprotectedquot-method-available-for-quotpartialquot-mocking-and-again.aspx – juharr

+2

Esa no es realmente una solución adecuada, tener que cambiar su clase original para exponer un método internamente a otras clases m Parece que está alterando su diseño para atender las pruebas. Mal olor para mí –

Respuesta

4

Creo que esta funcionalidad no existe en Rhino Mocks.

¿Por qué está tratando de burlarse de los miembros protegidos? ¿Por qué no solo prueba la clase como un todo? Alternativamente, puede crear una subclase de su clase de prueba y crear métodos protegidos "burlados" manualmente.

+0

Actualmente estoy subclasificando SUT y me burlo del miembro protegido. Me preguntaba si hay algo así en Moq que me salve de las subclases. Aceptaré tu respuesta, suponiendo que Rhino.Mocks no tenga esta funcionalidad. – Vadim

+0

Porque Microsoft tiene cosas como esta ahora. ... protegido interno virtual OkResult Ok() { } –

2

creamos el método protected como internal, y luego exponer los componentes internos al proyecto pruebas unitarias y burla de Rhino añadiendo las siguientes líneas a su AssemblyInfo:

[assembly: InternalsVisibleTo("YourNamespace.TestProjectName")] 
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

funciona un regalo para nosotros

+0

keith, gracias, pero estaba buscando otra solución y luego modifiqué mi AssemblyInfo. BTW. Hace aproximadamente 5 años creé una utilidad que genera el código de InternalVisibleTo para usted. Puede ahorrarte algo de tiempo. Puede encontrarlo aquí: http://vkreynin.wordpress.com/2007/12/09/testing-internals-members-with-internalsvisibleto-attribute/ – Vadim

+0

@Vadim nice gracias, creo que VS2012 le permite burlarse de algo tan ¡este problema podría no existir para la próxima generación de pruebas unitarias! – keith

Cuestiones relacionadas