Existen varias herramientas de prueba diferentes para PL/SQL. Steven Feuerstein ha escrito dos de ellos, utplsql y Probador de código Quest para Oracle (anteriormente QUTE). Soy un gran admirador de utplsql, pero ya no tiene una comunidad de soporte activa (lo cual es una pena). También tiende a ser bastante detallado, especialmente cuando se trata de configurar dispositivos de prueba. Tiene el virtual cardinal de ser paquetes PL/SQL puros; el código fuente es un poco retorcido pero es FOSS.
QCTO viene con una GUI, lo que significa que, al igual que otros productos de Quest, es decir, TOAD, es solo para Windows. No automatiza exactamente la generación de datos de prueba, pero proporciona una interfaz para respaldarla. Al igual que otros productos de Quest, QCTO tiene licencia, aunque existe una copia gratuita.
Steven (divulgación, él es uno de mis héroes de Oracle) ha escrito una comparación de características de todas las herramientas de prueba de PL/SQL. Obviamente, QOTC sale a la cabeza, pero creo que la comparación es honesta. Échale un vistazo.
Consejos sobre dispositivos de prueba en utplsql
Administrar datos de prueba para pruebas unitarias puede ser un verdadero dolor de cabeza. Desafortunadamente, utplsql no ofrece mucho para asumir la carga. Entonces
- Pruebe siempre contra valores conocidos :<último>
- Evite usar dbms_random;
- Intente restringir el uso de secuencias a columnas cuyos valores no importen;
- Las fechas también son complicadas. Evite la codificación de fechas:use variables que se completen con sysdate. Aprende a apreciar
add_months()
,last_day()
,interval
,trunc(sysdate, 'MM')
, etc.
- Solo asigne valores que sean necesarios para el conjunto de pruebas y las restricciones de la tabla;
- Utilice valores predeterminados tanto como sea posible;
- Proceduralice tanto como sea posible.
Otras cosas a tener en cuenta:
- La configuración de un dispositivo de prueba puede ser un ejercicio que requiere mucho tiempo. Si tiene muchos datos, considere crear un procedimiento para configurar los datos estáticos que se pueden ejecutar una vez por sesión e incluya solo datos volátiles en
ut_setup
sí mismo. Esto es especialmente útil cuando se prueba la funcionalidad de solo lectura. - recuerde que la creación de datos de prueba es un ejercicio de programación por derecho propio y, por lo tanto, propenso a errores.
- usar todas las características de utplsql.
utAssert.EqQuery
,utAssert.EqQueryValue
,utAssert.EqTable
,utAssert.EqTabCount
yutAssert.Eq_RefC_Query
son características muy útiles cuando se trata de inferir los valores de los datos volátiles. - al diagnosticar una ejecución de prueba que no salió como esperábamos, puede ser útil tener los datos que se usaron. Así que considera tener un hueco
ut_teardown
procedimiento y borrar los datos de prueba al comienzo deut_setup
.
Tratar con código heredado
Comentar la publicación de Gary me recordó otra cosa que puede resultarle útil. Steven F escribió ulplsql como una implementación PL/SQL de JUnit, la vanguardia Java del movimiento Test First. Sin embargo, las técnicas de TDD también se pueden aplicar a grandes cantidades de código heredado (en este contexto, el código heredado es cualquier conjunto de programas sin pruebas unitarias).
La clave a tener en cuenta es que no tiene que poner todo bajo prueba unitaria inmediatamente. Comience de forma incremental. Cree pruebas unitarias para cosas nuevas, Pruebe primero . Cree pruebas unitarias para los bits que va a cambiar antes de aplicar el cambio, de modo que sepa que seguirán funcionando después de haber realizado el cambio.
Hay mucho pensamiento en esta área, pero (inevitablemente aunque vergonzosamente) proviene principalmente de los programadores OO. Michael Feathers es el cap principal. Lea su artículo Trabajar de forma efectiva con código heredado . Si lo encuentra útil, posteriormente escribió un libro con el mismo nombre.