¿Se puede hacer sin necesidad de utilizar Typemock Islolator? He encontrado algunas sugerencias en línea, como pasa en una única cadena de conexión de metadatos, sin embargo, nada de lo que he encontrado, además Typemock parece permitir realmente para un simulacro de ObjectContext que se puede inyectar en los servicios para las pruebas unitarias. ¿Sueldo el $$ para TypeMock, o hay alternativas? ¿Nadie ha logrado crear algo comparable a TypeMock de código abierto?EF4: ¿es posible simular ObjectContext para probar la unidad?
Respuesta
estoy unidad de prueba EF4 fácilmente sin burlarse. Lo que hice fue crear una interfaz de repositorio usando el código de http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/ como base. Luego creé una clase InMemoryRepository<T>
que usaba la interfaz IRepository
. entonces sustituye el IObjectSet<T>
con un interior List<T>
de la clase y cambió de métodos de recuperación en consecuencia.
Por lo tanto, si necesita realizar pruebas unitarias, pase el InMemoryRepository en lugar del DataRepository.
-1 Linq2Objects se comporta de forma diferente a Linq2Entities. Es posible que las pruebas pasen contra una lista
No hay forma de pasarlo sin acceder a la base de datos, así que no estoy seguro de cuál es su punto. Burlarse no significa que sus Linq2Entities siempre serán válidas y funcionarán correctamente también. – KallDrexx
Encapule sus consultas y pruébelas en una base de datos real. Luego simulémoslos al probar su lógica comercial. Por lo tanto, cada consulta es un componente reutilizable, ya que un hecho funcionará. Y su lógica de negocio se prueba sin requerir una base de datos que se encuentre en el estado esperado. –
Envuelva el ObjectContext en una clase de proxy. Luego, inyecta eso en tus clases.
Sí, lo probé, y es una posibilidad; sin embargo, todos estos enfoques que usan proxies tienen sus propias limitaciones. Linq funciona de manera diferente por una cosa (se usa Linq para objetos, frente a Linq para entidades). –
cierto, pero esperando las pruebas unitarias para recoger las diferencias en las diferentes implementaciones de LINQ parece un poco por la borda para pruebas unitarias. Eso más en el campo de pruebas de integración, ¿no crees? – SamuelWarren
Ponga su consulta Linq2Entity detrás de una interfaz, unidad de prueba de forma aislada contra una base de datos real.
Escriba pruebas para su lógica de negocio con simulaciones para sus interfaces de consulta. ¡No dejes que Linq sangre en tu lógica de negocios!
¡No utilice el RepositoryPattern!
No creo que el patrón de repositorio es la única respuesta a la pregunta (que evita el problema, seguro)
me gusta esta respuesta - Creo más adecuado para la introducción de pruebas a una base de código existente Creating Interface for ObjectContext
- 1. EF4: ObjectContext Lifetime?
- 2. Cómo simular DataReader para probar la unidad DAL
- 3. ¿Es posible probar la unidad BundleConfig en MVC4?
- 4. EF4 - Pregunta de ObjectContext y herencia personalizada
- 5. Usar Clojure para probar la unidad Java
- 6. ¿Cómo puedo probar la unidad? ¿Es descartable?
- 7. ¿Cómo probar la unidad?
- 8. Crear interfaz para ObjectContext
- 9. ¿Cómo probar la unidad NSCoding?
- 10. Simular + = en Lua, ¿es posible?
- 11. ¿La aplicación ObjectContext de Entity Framework es correcta para el patrón de unidad de trabajo?
- 12. ¿Es posible probar la unidad de una clase que realiza llamadas P/Invoke?
- 13. ¿Es importante probar la unidad de un constructor?
- 14. ¿Qué debo hacer para probar esta unidad?
- 15. Cómo probar la unidad con diferentes configuraciones en Django?
- 16. ¿Cómo probar/simular conexiones simultáneas para un sitio web?
- 17. ¿Es posible simular un mensaje de buffer de protocolo Java?
- 18. Cómo probar las subclases de la unidad
- 19. ¿Cómo probar la unidad de su API?
- 20. ¿Es posible probar la transaccionalidad de un proceso?
- 21. Cómo probar la unidad HtmlHelper con Moq?
- 22. ¿Cómo puedo probar la unidad GC?
- 23. Cómo probar la unidad de análisis JSON
- 24. ¿Cuál es la forma correcta de simular archivos para probar un formulario?
- 25. Usa Scala para probar la unidad de Java?
- 26. ¿Qué usa para probar la unidad de su IU web?
- 27. ¿Cómo puedo probar la unidad de algo que utiliza VisualTreeHelper?
- 28. ¿Cómo probar la unidad Singleton class - C++?
- 29. Cómo probar la unidad de lógica de devolución de llamada?
- 30. ¿Cómo puedo simular correctamente mi controladorcontexto para probar ViewResult.ExecuteResult()?
Una sugerencia que he visto es romper las reglas que vuelven a probar contra el DB. El tipo dijo que usa CreateDatabase() para crear localmente una instancia de db "simulada" sobre la marcha. En general, quiero evitar esto ya que rompimos esta regla en un proyecto anterior y no funcionó tan bien. Estaba bien hasta unos ~ 600 pruebas, pero al final con> 2000 pruebas de que era totalmente inútil para la verdadera TDD y corrió las pruebas en "modo batch" de vez en cuando (se tarda 5 minutos o más para ejecutarlas). –