DBSet burlándose, modelo EF primero

Como se dice en el título, sigo el método Model First. Así que mis clases de modelo se generan automáticamente. Si quiero burlarme delDBContext derivadoMyModelContainer que contienenDBSets de clases de entidad. Lea un poco donde, para una prueba unitaria, necesita cambiarlo aIDBSet. Si es posible hacerlo especialmente en una clase que se genera automáticamente cuando hago "Ejecutar herramienta personalizada" es una preocupación. Pero a partir de ahora lo modifiqué.

Pero el verdadero problema es: cuando intento StubMyModelContainer para devolver un simulacro generado desdeIDBSet. El simulacro de Rhino está activando una InvalidOperationException: "Llamada no válida, la última llamada se ha utilizado o no se ha realizado ninguna llamada (asegúrese de que está llamando a un método virtual (C #) / Anulable (VB)").

Aquí está mi código de prueba de la unidad.

MyModelContainer dbMock = MockRepository.GenerateMock<MyModelContainer>();
IDBSet<Models.MyEntity> entityMock = MockRepository.GenerateMock<IDBSet<Models.MyEntity>>()
dbMock.Stub( x=>x.MyEntities ).Return( entityMock );

La última declaración está activando la excepción. Traté de usar la implementación falsa deIDBSet<> especificadoaquí, Pero no hay suerte!

Yo uso MVC 4, Rhino Mocks 3.6. Cualquier ayuda será apreciada.

Actualizar:

Después de algunas pruebas e investigaciones, encontré una solución. Cambié el código a:

MyModelContainer dbMock = MockRepository.GenerateMock<MyModelContainer>();
IDBSet<Models.MyEntity> entityMock = MockRepository.GenerateMock<IDBSet<Models.MyEntity>>()
//dbMock.Stub( x=>x.MyEntities ).Return( entityMock );
dbMock.MyEntities = entityMock;

Ahora elInvalidOperationException se ha ido. La prueba falla solo debido aExpectationViolationException Lo que debería ser normal.

En cuanto a la clase de Modelo generada automáticamente, se encuentra que la edición deDbContext's Plantilla T4 (extensión .tt) Hará el truco. Gracias aEl blog de alan

Pero quiero saber por qué el código anterior no funcionó. ¿Nadie?

Respuestas a la pregunta(3)

Su respuesta a la pregunta