Cuando se realizan pruebas unitarias, ¿es obligatorio utilizar una base de datos cuando se prueban las operaciones CRUD?
Asumiendo por un momento que ha extraído interfaces alrededor de dichas operaciones CRUD y ha probado todo lo que utiliza dicha interfaz a través de simulaciones o talones. Ahora se queda con un fragmento de código que es un método de guardar que contiene un poco de código para enlazar objetos y algo de SQL.
Si es así, declararía una "Unidad" y diría que necesita una base de datos, e idealmente una que sea al menos una buena representación de su base de datos, no sea que se vea atrapado con SQL específico del vendedor.
también me gustaría hacer uso de la luz de burla con el fin de obligar a las condiciones de error, pero no me gustaría probar el método salvarse con sólo burla. Entonces, aunque técnicamente esto puede ser una prueba de integración, aún lo haría como parte de mis pruebas unitarias.
Editar: Fallecieron 2/3s de tu pregunta. Lo siento.
Cómo SQL Lite ayuda con esto?
En el pasado, he usado bases de datos de memoria y me han mordido ya sea porque la base de datos que utilicé y el sistema en vivo hicieron algo diferente o tardaron bastante en iniciarse. Yo recomendaría que cada desarrollador tenga una base de datos local de desarrolladores de todos modos.
¿Tiene que cre-crear la base de datos de alguna manera en la memoria?
En la base de datos sí. Utilizo DbUnit para salpicar datos y mantener manualmente el esquema actualizado con las secuencias de comandos de SQL, pero podría utilizar solo las secuencias de comandos SQL. Tener una base de datos local de desarrollador agrega algo de mantenimiento adicional ya que tiene tanto el esquema como los conjuntos de datos para mantener los datos, pero personalmente considero que vale la pena ya que puede estar seguro de que la capa de la base de datos está funcionando como se esperaba.
Reconociendo el hecho de que en realidad es una prueba de integración, ¿hay algún valor para falsificar una base de datos para realizar las pruebas unitarias? –
Sí lo es. Le ayudaría a probar sus repositorios de datos, que usan DAL (en este caso, burlados). –
-1. Creo que la respuesta de Mark es más precisa: depende porque si estás escribiendo código que persiste datos en nombre de otro código (n-tier, biblioteca de frameworks, etc.), entonces una prueba unitaria es exactamente eso, probando que una unidad en particular de código está funcionando como se esperaba. Por ejemplo, supongamos que utiliza columnas de IDENTIDAD en su base de datos y devuelve el ID creado como una consulta SELECT después de un INSERT, este código debe ser unitario probado, es decir, se espera que el valor de retorno sea el ID esperado. Estoy de acuerdo en que crear repositorios simulados es bueno, pero hay algunas cosas de las que no te puedes burlar. – si618