dos razones:
- es lento (y las pruebas de unidad tiene que ser rápido)
- añade punto de falla adicional que está fuera de su control (no prueba muy fallan cuando la conexión falla DB?)
en cambio, como autor sugiere que debe probar su DAL con base de datos en memoria, como SQLit mi. Esto elimina los problemas mencionados anteriormente.
Sin embargo, este enfoque también tiene sus inconvenientes: es posible que tenga problemas para trasladar SQL de un dialecto de base de datos a SQLite. Esto, naturalmente, significa que no podrá probar partes específicas de MySQL de su DAL. Como siempre, es una espada de doble filo: obtienes velocidad de prueba unitaria y aislamiento, pero pierdes credibilidad (si podemos llamarlo así): si pasó SQLite, ¿puedes estar 100% seguro de que funciona en MySQL?
Puede que no sea una mala idea dejar el núcleo de sus pruebas DAL/DAO en la fase de prueba de integración, donde los probará contra el motor DB real que utiliza y dejará cosas pequeñas para las pruebas unitarias; por ejemplo, mapeos (si usa ORM).
Editar: la rápida es de ninguna manera requisito estricto - es sólo un buen consejo general. Al hacer TDD, los desarrolladores ejecutarán pruebas unitarias mucho (piense de esta manera; cada compromiso con el repo local/cada cambio de código importante requerirá una verificación de la integridad de la base del código ejecutando pruebas unitarias); quizás no todos, pero seguramente algunos. Desea que este proceso sea rápido.
Ahora, teniendo pruebas lentas por lo general termina así:
- "Hombre, esto las cosas se ejecuta tan lento ..."
- "Tal vez pueda ejecutar sólo algunos de ellos ... voy a correr resto más tarde"
- en este punto sabemos nunca llega tarde
- 'Hey, mi última confirmación no romper nada y no corre ningún pruebas en absoluto!'
- "¿Por qué iba a ejecutarlos después de todo?"
pruebas por escrito que no se están ejecutando, casi mata el propósito de escribir ellos.
Esto le sucedió a un amigo que trabaja conmigo; su equipo tenía un conjunto de pruebas corriendo +/- 20 minutos (pruebas DAL mal hechas, contenedor IoC involucrado en pruebas), los desarrolladores comenzaron a ejecutar algunas pruebas, y muy pronto los correos electrónicos "interruptores de compilación actuales" se convirtieron en algo cotidiano. Tenían suite bastante grande, pero la prueba de ruptura fue no tan malo.
En general, su enfoque parece correcto - No movería las pruebas a SQLite. Como sugerí, haga que la capa de la base de datos se pruebe con el conjunto de pruebas de integración (de modo que se pueda ejecutar por separado que el conjunto de pruebas de unidades normales).
la presentación vinculada ya no está disponible. :( – SDC
@SDC: el PDF de la presentación está disponible en un [enlace no personalizado justo debajo del cuadro de presentación de slideshare] (http: //en.oreilly.com/mysql2008/public/asset/attachment/1980). (Diatriba: y por eso digo que [un enlace debe ser similar a un vínculo] (http://web.archive.org/web/20100713205344/http://my.opera.com/CrazyTerabyte/blog/web-design -tip-a-link-should-look-like-a-link)) –