Algunos pensamientos desordenados:
Es bueno tener accesorios (con o sin estructura db), cargan en dB en el arranque() de cada prueba. Puede venir, es decir. de archivos JSON o XML, uno para cada tabla. Si lo combina con funciones como getNthFixture ($ sTable, $ nIndex) o countFixtures ($ sTable), puede probar fácilmente sus consultas. Aún más, puede usar [LINQ] [1] para obtener los resultados esperados del conjunto de aparatos con poca o ninguna diferencia entre DB & consulta de aparatos. Encuentro que es bastante fácil adaptarme en la fase inicial de creación de prototipos/desarrollo, cuando la estructura db está cambiando muy a menudo. Agregar una afirmación para comparar directamente el resultado de la consulta LINQ con el resultado de la consulta db hace que crear pruebas sea puro placer;)
Otras sugerencias: db debe reiniciarse antes de cada método de prueba, no antes de la prueba. Idealmente, debería dejar caer la base y reconstruirla a partir de un conjunto completo de accesorios.
Y, si puede, intente realizar pruebas que funcionen con diferentes bases de datos (algunas cosas, por supuesto, no son portátiles, pero la mayoría lo es). Utilice al menos sqlite aparte de mysql/postgres/other_big_rdbm.
Si está probando framework u otro sistema complejo, probablemente debería simular el acceso a la base de datos singleton. Si algunas cosas codificadas están enterradas profundamente en un orbe no tan flexible, puede ser dolor en el cuello, por así decirlo.
La buena idea es registrar todas las consultas que no pasaron la prueba y/o mostrarlas en mensajes de error. También para mensajes de error db. Si está probando grandes bases de datos cuando el rendimiento es una preocupación, intente registrar consultas lentas al mismo tiempo.
Más mágico y tal vez un poco más difícil, es automatizar la prueba de si todas las columnas utilizadas en where/having/joins están indexadas. Es tal vez algo que debería pertenecer a Jointed Php/Database Code Sniffer (tm) en lugar de pruebas unitarias, y no es muy fácil de implementar, pero una vez utilizado se asegura en gran medida la calidad del código.
Otro buen consejo, que va desde la triste experiencia personal: siempre agregue pruebas para conjuntos de caracteres muy pequeños, especialmente si trabaja con muchos idiomas diferentes.mundo ISO-8859-1 es muy pequeña;)
[1]: http://phplinq.codeplex.com/ LINQ
posible duplicado de [/ ¿Cuáles son las mejores prácticas estándar para la creación de pruebas unitarias para las bases de datos utilizando la funcionalidad?] (http: // stackoverflow .com/questions/3560116/what-are-standard-best-practices-for-creating-unit-tests-for-functional-using) – Gordon
Gordon, de hecho escribí esta pregunta específicamente *** porque *** las respuestas están ahí no parece entrar en mucha profundidad, ni el capítulo 'PHPUnit' sobre las pruebas de bases de datos hace referencia allí. Me gustaría ver más sobre esto. –
Para aclarar las cosas: tiene una función que realiza algunas consultas (o consultas) en un DB basado en una entrada conocida. Esto arrojará un resultado y ahora desea verificar si ese resultado es lo que esperaría. Si es así, entonces comenzar desde un estado conocido (donde también se sabe cuál debería ser el resultado real) sería un buen comienzo (y eso es a lo que todos se refieren en la pregunta duplicada). Simplemente restaure este estado conocido en cada ejecución de prueba. – wimvds