MOQ: ¿cómo burlarse de una interfaz que necesita ser transmitida a otra interfaz?

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 en 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 en I1 para acceder a los métodos que están implícitos a través de esa interfaz. En el código esto no es un problema y todo funciona como se esperaba.

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 objeto de implementación lanzado en la interfaz IGetNewInstance ... por lo general, puedo burlarme de esto y hacer que vuelva (y sigo trabajando con el objeto simulado).

sin embargo, cuando intenta convertir este objeto devuelto de tipo I2 en I1, se obtiene una referencia nula; esto tiene sentido ya que el objeto simulado que implementa I2 no hereda de nada que herede I1.

la pregunta es ¿cómo puedo obligar al objeto simulado a heredar de I1 y I2 al mismo tiempo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta