unit-testing - test - moq c# ejemplos
MOQ: ¿cómo burlarse de una interfaz que debe enviarse a otra interfaz? (1)
De la manera en que te entiendo, quieres crear un simulacro que implemente dos interfaces. Con Moq, eso es tan simple como esto:
var mock = new Mock<IFoo>(); // Creates a mock from IFoo
mock.As<IBar>(); // Adds IBar to the mock
mock.As<IBar>().Setup(m => m.BarMethod()).Returns(new object()); // For setups.
Ahora, puede establecer expectativas y usar su simulacro, ya que normalmente usaría el objeto que implementa tanto IFoo
como IBar
.
Para su método GetNewInstance
, puede configurar una expectativa que devuelva el simulacro.
lo que quiero hacer es construir un moq para I1, lo cual está bien ... sin embargo, en el curso del método que estoy probando que usa este simulacro, necesito convertirlo a I2 para acceder a algunas propiedades que no están en I1
Interface I1
{ int AProperty{get;set;}}
Interface I2
{int AnotherProperty{get;set;}}
Entonces tengo algunos objetos
Class O1 : I1 {}
y
Class O2 : O1 , I2 {}
el problema es que cuando tengo una instancia de un objeto de implementación I2, puedo convertirlo a I1 para acceder a los métodos que se implementan a través de esa interfaz. En el código, esto no es un problema y todo funciona como se espera.
El único problema surge cuando se escribe una prueba unitaria en esa clase.
Las interfaces también exponen un método llamado GetNewInstance que devuelve una instancia inicializada del lanzamiento del objeto de implementación en la interfaz IGetNewInstance ... generalmente puedo simular esta multa y hacer que se devuelva a sí misma (y sigo trabajando con el objeto simulado).
sin embargo, cuando intenta convertir este objeto devuelto de tipo I2 en I1, se obtienen resultados de referencia nulos; esto tiene sentido ya que el objeto simulado que implementa I2 no hereda de ningún elemento que herede I1.
la pregunta es ¿cómo puedo forzar al objeto simulado a heredar de I1 ansd I2 al mismo tiempo?